使用selenium使用xpath输入多个元素

Use selenium to input multiple elements using xpath

本文关键字:使用 元素 输入 selenium xpath      更新时间:2023-09-26

我是Selenium的新手,所以我不确定这是否是解决问题的最佳方法,但我正在寻找一种方法来使用xpath(或css)来定位一系列输入元素,并以某种方式迭代所有元素并输入一些文本。

类似如下:

<form>
  value1 <input type="text" placeholder="value1"><br>
  value2 <input type="text" placeholder="value2"><br>
  value3 <input type="text" placeholder="value3"><br>
</form>

我能找到元素使用这个:

var input = driver.findElement(By.xpath("//input[@type='text']"))

我可以输入xpath找到的元素的第一次出现:

input.sendKeys('Some text')

这就是我卡住的地方。我不确定如何在第一个输入字段后输入值。

最后,我想做的是以某种方式将文本发送到xpath过滤器定位的所有输入字段。我在想这可能是可能的for循环,但我不确定如何与webdriverjs使用的承诺管理器。

这是可能的还是有更好的方法来做到这一点?

您可以执行以下操作

driver.findElements(By.xpath("<xpath>")).then(function(elem) {
    for(var i=0; i<elem.length; i++){
        driver.findElements(By.xpath("<xpath>")).get(i).sendKeys('some Text');
    }
});

只替换为您也要发送文本的元素的xpath。通常,您可以使用.get()从.findElements()

返回的元素列表中选择特定的元素。

您应该尝试使用forEach时,必须采取相同的行动,所有元素有共同的选择器如下:-

driver.findElements(By.css("input[type='text']")).then(function(elements) {
  elements.forEach(function (input) {
      input.sendKeys('Some text');
  })
});

或者如果你想使用promise做同样的事情,你需要参考Selenium的承诺,如下所示:-

var promise = require('selenium-webdriver').promise;
var elements = driver.findElements(By.css("input[type='text']"))
promise.all(elements).then(function (input) {
     input.sendKeys('Some text');
});

我在这篇文章中得到了其他人的帮助。下面是工作代码:

driver.findElements(By.css("input[type='text']"))
.then(function (inputs) {
    inputs.forEach(function (input) {
        input.sendKeys(password)
    })
})