Я должен проверить интернет-магазин.Пользователи могут добавлять товары в свою корзину.Когда корзина пуста, создается специальный раздел с идентификатором «пустая корзина».Если корзина не пуста, идентификатор этого раздела становится «корзиной».
Я использую Java и Selenium 3.9
Это мои два селектора
@FindBy(how = How.CSS, using = "#empty-basket > section")
private WebElement conteneur_panier_vide;
@FindBy(how = How.CSS, using = "#basket > section:nth-child(1)")
private WebElement conteneur_panier_non_vide;
Чтобы проверить,блок, содержащий элементы, хорошо сформирован, я проверяю, есть ли один из разделов, описанных выше.Я использую этот код для этого:
this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
ExpectedConditions.visibilityOf(conteneur_panier_non_vide)
)
);
Однако, это дает мне ошибку
org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание вхотя бы одно условие должно быть действительным
Удивлен, я пробовал это:
this.wait.until(ExpectedConditions.visibilityOf(conteneur_panier_vide))
на странице с пустой корзиной.Это работает, WebElement найден.
Я тогда попробовал это:
this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
)
);
И это также работает.Это означает, что добавление несуществующего элемента к «или» нарушает его, что в точности противоположно тому, что должно быть.
Кто-нибудь имеет представление о том, почему мой код не работает?
Редактировать: решено!
Проблема заключалась в том, что искомый элемент отсутствовал на странице при вызове функции or
, что приводило к неисправности, упомянутой выше.
Я просто положил
this.wait.until(ExpectedConditions.urlContains(MY_CART_URL));
, что обеспечивает наличие одного из двух разделов.