Как нажать на кнопку до изменения заголовка страницы с помощью Selenium Java

#java #selenium #selenium-webdriver #while-loop #automated-tests

#java #селен #selenium-webdriver #цикл while #автоматизированные тесты

Вопрос:

У меня есть одна кнопка, которая иногда не выполняет фактический щелчок, из-за этого я написал код для ее обработки с помощью цикла while, где он будет щелкать, пока не обнаружит новое назначение заголовка страницы. Но это работает не так, как ожидалось. Пожалуйста, помогите мне, заранее спасибо.

     String titleWhenLoad = driver.findElement(By.xpath("//span[@class='assignment_title']")).getText();

    String titleNext = titleWhenLoad;
    while ((titleWhenLoad.equals(titleNext))
            amp;amp; (driver.findElement(By.xpath("//span[@class='assignment_title']")).isDisplayed())) {

        WebElement btn = driver.findElement(By.xpath("//button[contains(text(),'Submit')]"))
        btn.click();
        
        if (driver.findElement(By.xpath("//span[@class='assignment_title']")).isDisplayed()) {
            titleNext = driver.findElement(By.xpath("//span[@class='assignment_title']")).getText();

        } else {
            break;
        }

    }
  

Комментарии:

1. я настоятельно рекомендую использовать waits ( selenium-python.readthedocs.io/waits.html ) вместо того, чтобы использовать цикл. Это будет повторяться тысячи раз в секунду, что неэффективно

2. @SamridhTuladhar Я пытался их использовать, но иногда кнопка на самом деле не нажимается. Даже я пробовал с Java script, он не работает ни в том, ни в другом случае. Эта кнопка распространена во всем приложении, и из-за этого мои скрипты терпят неудачу.

3. @frainH ответил ниже, объединив оба цикла и ожидание. Поскольку цикл выполняется только один раз в 3 секунды, все должно быть в порядке.

Ответ №1:

Вы можете WebDriverWait использовать .invisibilityOfElementWithText using, чтобы дождаться исчезновения элемента с определенным текстом.

Чтобы нажать на цель кнопки, я предлагаю использовать Actions class .

Проверьте это:

 String titleWhenLoad = driver.findElement(By.xpath("//span[@class='assignment_title']")).getText();

boolean findNewTitle = false;
while (!findNewTitle) {
    try {
        new WebDriverWait(driver, 3).until(ExpectedConditions.invisibilityOfElementWithText(By.xpath("//span[@class='assignment_title']"), titleWhenLoad));
        findNewTitle = true;
    } catch (Exception e) {
        WebElement btn = driver.findElement(By.xpath("//button[contains(text(),'Submit')]"));
        Actions builder = new Actions(driver);
        builder.moveToElement(btn).click(btn).build().perform();
    }
}
  

Импортируйте следующее:

 import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.interactions.Actions;
  

Ссылка:

https://www.selenium.dev/documentation/en/webdriver/waits/#expected-conditions

https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

Комментарии:

1. Это работает как шарм. Вы сэкономили мое время. Большое вам спасибо.

2. @cindy87 Добро пожаловать, рад это слышать.