Selenium / Java выходит из цикла while

1

Я добавляю кучу людей в список, и я хочу удалить их из списка позже. Я написал метод, который нажимает на стандартный элемент X, чтобы удалить пользователей. Моя проблема заключается в том, что когда я доберусь до точки, где больше нет экземпляров элемента X, чтобы щелкнуть, я получаю ошибку следующим образом:

"[31morg.openqa.selenium.NoSuchElementException: Не удалось найти элемент: {" method ":" xpath "," selector ":"//div [3]/ul/li/div/div/img "}"

Но разве это не так, как я выхожу из своего цикла While? Когда элемент = null и, следовательно, условие является ложным, не должен ли цикл while заканчиваться и не вызывать сообщение об ошибке?

public class PrivacyList extends FluentPage {

@FindBy(xpath="//div[3]/ul/li/div/div/img") 
private FluentWebElement XIcon ;


public void removeUserFromlist(){

    while(XIcon!= null){            
            System.out.println("XICON is displayed");
            XIcon.click();
            System.out.println("XICON was clicked");
        }
    System.out.println("Users Removed");
}

}

благодаря

  • 0
    Оценка адреса Xpath вместо webElement решила эту проблему и стала простым выходом из цикла while. в while(driver.findElements(By.xpath("//div[3]/ul/li/div/div/img")).size()!=0)
Теги:
selenium
while-loop
fluentlenium

2 ответа

2

PageFactory, используя @FindBy, оценивает WebElement лениво - это означает, что в первый раз он используется. После первого раза он снова не оценивается! Таким образом, в вашем случае, если он будет найден в первый раз, он никогда не станет null, если вы не будете переоценивать его каждый раз через цикл.

Вам придется использовать что-то еще, чтобы выйти из вашего цикла. Возможно, подсчет элементов //div[3]/ul/li.

1

Оценка адреса Xpath вместо webElement решила эту проблему и была легким выходом из цикла while.

while(driver.findElements(By.xpath("//div[3]/ul/li/div/div/img")).size()!=0)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню