Я добавляю кучу людей в список, и я хочу удалить их из списка позже. Я написал метод, который нажимает на стандартный элемент 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");
}
}
благодаря
PageFactory, используя @FindBy
, оценивает WebElement лениво - это означает, что в первый раз он используется. После первого раза он снова не оценивается! Таким образом, в вашем случае, если он будет найден в первый раз, он никогда не станет null
, если вы не будете переоценивать его каждый раз через цикл.
Вам придется использовать что-то еще, чтобы выйти из вашего цикла. Возможно, подсчет элементов //div[3]/ul/li
.
Оценка адреса Xpath вместо webElement решила эту проблему и была легким выходом из цикла while.
while(driver.findElements(By.xpath("//div[3]/ul/li/div/div/img")).size()!=0)
while(driver.findElements(By.xpath("//div[3]/ul/li/div/div/img")).size()!=0)