在Selenium Webdriver中,我们有三个文本框。所有文本框都有相同的ID,我想在第二个文本框中发送一些文本。
这是我的代码:
Driver.findElements(By.xpath("//*[@id='testInstanceScan']"));
有谁可以帮助如何处理具有相同ID的文本框? 目前我正在使用下面的代码,它总是为所有三个文本框发送相同的文本。
List<WebElement> textfield1 = Driver.findElements(By.xpath("//*[@id='testInstanceScan']"));
for(int i=0; i<textfield1.size();i++){
WebElement local_textfield1=textfield1.get(i);
String value1=local_textfield1.getAttribute("placeholder");
if(value1.equalsIgnoreCase(""))
{
local_textfield1.sendKeys("Amarendra Singh");
}
}
答案 0 :(得分:0)
有两种方法可以获得第二个文本框。
方法1:使用查找元素
List<WebElement> textfields = Driver.findElements(By.xpath("//*[@id='testInstanceScan']"));
textfields.get(1).sendKeys("Amarendra Singh");
方法2:使用xpath
WebElement textfield2 = Driver.findElements(By.xpath("(//*[@id='testInstanceScan'])[2]"));
textfield2.sendKeys("Amarendra Singh");
答案 1 :(得分:0)
您可以使用类似技巧的数组来访问与XPath匹配的每个元素
WebElement textField1 = driver.findElements(By.xpath("(//*[@id='testInstanceScan'])[1]"));
WebElement textField2 = driver.findElements(By.xpath("(//*[@id='testInstanceScan'])[2]"));
答案 2 :(得分:0)
我知道这样做的最快捷最简单的方法是使用XPath指定预期的ID和placeholder =“”,然后指定所需元素的索引。
给出
的HTML示例<html>
<div id="testInstanceScan" placeholder="">e1</div>
<div id="testInstanceScan" placeholder="">e2</div>
<div id="testInstanceScan" placeholder="">e3</div>
</html>
以下代码可以使用
List<WebElement> searchBox = driver.findElements(By.xpath("//div[@id='testInstanceScan'][@placeholder='']"));
System.out.println(searchBox.get(1).getText());
并返回
e2
是包含所需ID,空占位符属性值的元素,是第二个元素。这种形式的XPath可以针对很多不同的情况进行定制,以便在一次传递中获得所需的元素,而不是循环或过滤集合。
在您的情况下,您的最终代码看起来像
List<WebElement> textfields = driver.findElements(By.xpath("//input[@id='testInstanceScan'][@placeholder='']"));
textfields.get(1).sendKeys("Amarendra Singh");
如果仍然无效,您可能需要等待。
By locator = By.xpath("//input[@id='testInstanceScan'][@placeholder='']");
List<WebElement> textfields = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(locator));
textfields.get(1).sendKeys("Amarendra Singh");
答案 3 :(得分:0)
我不知道究竟是什么是yoyr问题但是我理解你想要在具有相同xpath的文本框上执行操作
这是我用过的示例Html
<html>
<div id="test" placeholder="">element1</div>
<div id="test" placeholder="">element2</div>
<div id="test" placeholder="">element3</div>
<div id="test" placeholder="">element4</div>
</html>
首先使用findElements()
提取所有元素,然后使用if循环选择一个并执行操作这是我的代码
WebDriver driver=new FirefoxDriver();
driver.get("URL");
List<WebElement> allElements=driver.findElements(By.xpath("//div[@id='test']"));
for (WebElement tempElement : allElements) {
if(tempElement.getText().equalsIgnoreCase("element2"))
{
System.out.println(tempElement.getText()); // you can perform your operations
}
}