gpt4 book ai didi

java - Selenium 网络驱动程序 : Faster way to set values in many inputs

转载 作者:行者123 更新时间:2023-11-30 02:51:54 25 4
gpt4 key购买 nike

我正在进行许多测试,我必须将值放入表中的 168 个输入字段中。此时,我使用这样的 for 语句:

for (int i = 1; i < numberOfValues + 1; i++) {
try {
findingElement.byXPath(".//*[@id='TDCON']/tbody/tr[" + i + "]/td[4]/span/span[2]/span/span/input").sendKeys(Keys.chord(Keys.CONTROL, "a"), value);
}catch (NoSuchElementException ex) {
break;
}
}

执行 40 个类似的测试花了很长时间。使用 Selenium WebDriver 有没有更快的方法?

最佳答案

执行时间与执行的命令数量成正比。因此,为了减少它,您可以通过一次调用选择所有元素。如果可能的话,您还应该使用 CSS 选择器而不是 XPath:

List<WebElement> elements = driver.findElements(By.cssSelector(
"#TDCON > tbody > tr > td:nth-child(4) > span > span:nth-child(2) > span > span > input"));

for (int i = 0; i < numberOfValues; i++) {
try {
elements[i].sendKeys(Keys.chord(Keys.CONTROL, "a"), value);
}catch (NoSuchElementException ex) {
break;
}
}

另一种方法是注入(inject)一段 Javascript 并直接分配 .value 属性:

((JavascriptExecutor)driver).executeScript(
"var cells = arguments[0].querySelectorAll('#TDCON > tbody > tr > td:nth-child(4)'); " +
"var values = arguments[1]; " +
"for(var i = 0; i < values.length; ++i) { " +
" cells[i].querySelector('span > span:nth-child(2) > span > span > input').value = values[i]; " +
"} "
, findElement, values);

但如果输入是由页面动态处理的,它可能不起作用。

关于java - Selenium 网络驱动程序 : Faster way to set values in many inputs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com