Оператор If не работает в Selenium Webdriver

#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(),'...') .