获取表单中的所有元素

Eve*_*Eve 13 html forms nested elements selenium-webdriver

我想使用Selenium提交一个包含多个元素的表单.例如:

<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>
Run Code Online (Sandbox Code Playgroud)

如果我使用find.Element(By.name)来查找表单元素,我怎样才能获得它的子元素a,b和c?并将值输入这三个元素然后提交表单?

另一个类似的问题是:如果我得到元素a,如何获取元素b并且c是相同的形式并首先填充(或选择)值,然后提交表单?

提前致谢!

Fai*_*aiz 18

您可以使用xpath来获取特定元素的所有直接子元素parent/*.

如果您已经form使用了元素findElement(),如下所示:

WebElement formElement = driver.findElement(By.name("something"));
List<WebElement> allFormChildElements = formElement.findElements(By.xpath("*"));
Run Code Online (Sandbox Code Playgroud)

或直接使用:

List<WebElement> allFormChildElements = driver.findElements(By.xpath("//form[@name='something']/*"));
Run Code Online (Sandbox Code Playgroud)

然后查看每个元素的标记和类型以指定其值:

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 
    }  
}
Run Code Online (Sandbox Code Playgroud)