1

我需要 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 次,而不适用于所有情况。请帮忙。

4

2 回答 2

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!");
}
于 2013-03-26T02:37:40.500 回答
0

这是另一种不使用隐式等待但显式的方法,它在跨浏览器和跨平台测试时更具可移植性和可维护性。您无需检查元素是否可见/显示,因为 WebDriverWait 明确为您执行此操作。

有关不同类型等待的更多信息,请参阅以下内容

   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();

   }
于 2013-03-26T14:25:31.207 回答