我想使用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>
如果我使用find.Element(By.name)找出表单元素,我怎样才能获得它的子元素a,b和c?然后将值输入这三个元素,然后提交表单?
另一个类似的问题是:如果我得到元素a
,那么如何获取元素b
和c
的形式相同并首先填充(或选择)值,然后提交表格?
提前致谢!
答案 0 :(得分:16)
您可以使用xpath使用parent/*
获取特定元素的所有直接子元素。
如果您已使用form
使用findElement()
元素,则如下所示:
WebElement formElement = driver.findElement(By.name("something"));
List<WebElement> allFormChildElements = formElement.findElements(By.xpath("*"));
或直接使用:
List<WebElement> allFormChildElements = driver.findElements(By.xpath("//form[@name='something']/*"));
然后查看每个元素的标记和类型以指定其值:
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
}
}
答案 1 :(得分:3)
driver = webdriver.Firefox()
driver.get("https://www.hackerearth.com/problems/")
#find all form input fields via form name
_inputs = driver.find_elements_by_xpath('//form[@name="signup-form"]//input')
for input in _inputs:
#print attribute name of each input element
print input.get_attribute('name')
<强> O / P 强>
FIRST_NAME
姓氏
电子邮件
密码
提交
答案 2 :(得分:0)
抱歉,先错过了你的问题。 例如,您可以使用xpath定位器找到表单中的任何元素。 在你的情况下
find.Element(By.xpath("//form/*[@name='a']"))
find.Element(By.xpath("//form/*[@name='b']"))
find.Element(By.xpath("//form/*[@name='c']"))
如果您的网页上有多个表单标记,则也可以使用任何属性指定它。
find.Element(By.xpath("//form[@name='something']/*[@name='c']")) //as it is in your sample
您还可以先指定表单,然后使用其中的元素。我不确定你的语法,但首先,你需要以任何方式将表单webelement返回到一些var(让它为form
)。之后,您可以传递此var而不是webdriver实例。
form.find.Element(By.xpath('./some/child/locator'))
答案 3 :(得分:0)
将表单元素存储在变量中,然后将其用作搜索上下文以查找子元素:
WebElement formElement = driver.findElement(By.name("something"));
WebElement a = formElement.findElement(By.name("a"));
WebElement b = formElement.findElement(By.name("b"));
WebElement c = formElement.findElement(By.name("c"));
a.sendKeys("first child element [a]");
b.sendKeys("password");
c.submit();