需要获得相同的webelement定位器的出现,无论何时出现,然后单击它

时间:2013-03-25 21:24:00

标签: selenium webdriver selenium-rc selenium-webdriver

我需要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时间,而不是所有出现的时间。 请帮忙。

2 个答案:

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

   }