如何将文本发送到具有相同xpath的文本框

时间:2017-09-27 13:02:50

标签: selenium xpath selenium-webdriver

在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");
        }
        }

4 个答案:

答案 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
}
}