Трябва да получите появата на същия локатор на уеб елемент и където и да присъства, след което щракнете върху него

Имам нужда от 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 път, не за всички случаи. Моля помогнете.


person pranky301    schedule 25.03.2013    source източник
comment
Вашият оператор if/else изглежда неправилен, първия път, когато не го намери на страницата, ще излезете от цикъла си. Освен това това се случва много бързо, трябва ли да изчакате страницата да се зареди или нещо друго, ако елементът не присъства?   -  person so cal cheesehead    schedule 26.03.2013


Отговори (2)


Ето, опитайте нещо подобно:

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!");
}
person djangofan    schedule 26.03.2013

Ето друг подход без използване на имплицитни изчаквания, но експлицитно, което е по-преносимо и поддържано при тестване на различни браузъри и различни платформи. Няма нужда да проверявате дали елементът е видим/показван, тъй като 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();

   }
person SilverColt    schedule 26.03.2013