我需要java webdriver来点击页面上任何位置的按钮。没有固定的元素出现次数但不超过20。
我尝试使用:
for(i=0; i<=20; i++){
try{
driver.findElement(By.cssSelector(".btn.btn-small.btn-list")).isDisplayed();
present = true;
} catch(Exception g) {
present = false;
}
if(present) {
driver.findElement(By.cssSelector(".btn.btn-small.btn-list")).click();
WaitForPageToLoad(5);
} else {
System.out.println(i);
break;
}
}
但这只是单击元素1时间,而不是所有出现的时间。 请帮忙。
答案 0 :(得分:1)
在这里,尝试这样的事情:
boolean present = false;
List<WebElement> els= d.findElements( By.cssSelector(".btn.btn-small.btn-list"));
d.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS );
for ( WebElement we : els ) {
try{
if ( we.isDisplayed() ) {
we.click();
present = true;
} else {
System.out.println("Invisible.");
}
} catch( StaleElementReferenceException|NoSuchElementException g) {
System.out.println("WARNING: " + g.getMessage() );
}
}
if ( present ) {
System.out.println("Found bookoo!");
} else {
System.out.println("Found nada!");
}
答案 1 :(得分:0)
这是另一种不使用隐式等待而是显式的方法,这种方法在跨浏览器和跨平台测试时更易于移植和维护。当WebDriverWait为您明确执行此操作时,无需检查元素是否可见/显示。
See the following了解有关不同类型等待的更多信息
String CSS_SELECTOR = ".btn.btn-small.btn-list";
webDriverWait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(CSS_SELECTOR)))
List<WebElement> elements = driver.findElements(By.cssSelector(CSS_SELECTOR));
for ( WebElement element : elements ) {
element.click();
}