#java #selenium #if-statement
Вопрос:
У меня всегда возникают проблемы с утверждениями if в selenium. Большую часть времени они делают противоположное тому, что должны делать.
Я намеренно ввел неверный адрес электронной почты, поэтому оплата не будет произведена. Ты Упс! отображается на веб-странице, которая является правильным ответом, однако мой тест возвращается с ошибкой. Xpath является правильным, поскольку он проходит, когда я ввожу правильное электронное письмо.
Пожалуйста, может кто-нибудь взглянуть и посоветовать мне, где я ошибаюсь.
@Test(dependsOnMethods = { "WithdrawalButtonOnNavBar" })
public void WithdrawWinnings() throws InterruptedException {
Thread.sleep(500);
driver.findElement(By.cssSelector("input[name='email']")).sendKeys(skrillAccount);
Thread.sleep(500);
driver.findElement(By.xpath("//p[contains(text(),'Continue')]")).click();
Thread.sleep(500);
driver.findElement(By.cssSelector("input[name='amount']")).sendKeys("2");
Thread.sleep(500);
driver.findElement(By.xpath("//*[@id="__next"]/div/div[1]/div[2]/div/div[3]/div/div/div")).click();
Thread.sleep(5000);
WebElement Success = driver.findElement(By.xpath("//p[contains(text(),'Success!')]"));
WebElement Oops = driver.findElement(By.xpath("//p[contains(text(),'Oops!')]"));
if (Success.isDisplayed()) {
System.out.println("Payment was successful");
} else if(Oops.isDisplayed()) {
System.out.println("Payment was unsuccessful");
}
;
}
org.openqa.селен.Исключение NoSuchElementException: такого элемента нет: Не удается найти элемент: {«метод»:»xpath»,»селектор»:»//p[содержит(текст(),’Успех!’)]»}
(Информация о сеансе: chrome=90.0.4430.85)
Для получения документации по этой ошибке, пожалуйста, посетите: https://selenium.dev/exceptions/#no_such_element
Ответ №1:
Это не имеет никакого отношения к if
заявлению. Исключение создается при нахождении элемента «успех». И явное ожидание должно помочь:
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement Success = wait.Until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//p[contains(.,'Success!')]"));
if (Success.isDisplayed())
Я также обнаружил contains(.,'...')
, что более снисходителен, чем contains(text(),'...')
.