我正在进行许多测试,我必须将值放入表中的168个输入字段中。此刻,我正在使用这样的声明:
[locationManager startUpdatingLocation];
执行40次与此类似的测试花了很长时间。有没有更快的方式使用Selenium WebDriver?
答案 0 :(得分:2)
执行时间与执行的命令数成正比。因此,要减少它,您可以通过一次调用选择所有元素。您应该尽可能使用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;
}
}
另一种方法是注入一段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);
但如果打字由页面动态处理,它可能无效。