Get all Elements in a Form
element, forms, html, nested, selenium-webdriver
Solution
You can use xpath to get all direct child elements of a specific element using `parent/*`.
If you already have your `form` element using `findElement()`, as below:
WebElement formElement = driver.findElement(By.name("something"));
List<WebElement> allFormChildElements = formElement.findElements(By.xpath("*"));
or directly using:
List<WebElement> allFormChildElements = driver.findElements(By.xpath("//form[@name='something']/*"));
Then look at the tag and type of each element to specify its value:
for (WebElement item : allFormChildElements)
{
if (item.getTagName().equals("input"))
{
switch (item.getAttribute("type"))
{
case "text":
//specify text value
break;
case "checkbox":
//check or uncheck
break;
//and so on
}
}
else if (item.getTagName().equals("select"))
{
//select an item from the select list
}
}
Problem
I would like to use Selenium to submit a form which contains several elements. For example: ``` <form name="something"> <input type="text" name="a">Username</input> <input type="password" name="b">password</input> <select name="c" id="c"> <option value="1">1</option> <option value="2">2</option> </select> <input type="submit" name="submit">submit</input> </form> ``` If I use find.Element(By.name) to find out the form element, how can I get its children elements a, b, and c? And input the values into these three elements then submit the form? Another similar question is: if I get the element `a`, how to get elements `b` and `c` are in the same form and to fill (or select) values first, then submit the form? Thanks in advance!