Нужно ли уделять меньше времени объявленному для ExplicitWait по сравнению с Implicitwait

Где-то я читал, что смешение Implicit и Explicit дает безнадежный результат. Это правда?

Источник: https://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

ВНИМАНИЕ: не смешивайте неявные и явные ожидания! Это может привести к непредсказуемому времени ожидания. Например, установка неявного ожидания 10 секунд и явного ожидания 15 секунд может привести к возникновению тайм-аута через 20 секунд.

В этом случае, мы должны дать меньше времени / равного неявному ожиданию???

1 ответ

Честно говоря, с хорошей реализацией инфраструктуры автоматизации тестирования вам не нужно implicitWait, Вы должны всегда явно ждать условий.

Неявное ожидание может привести к замедлению работы ваших тестов. Automated Test Suite всегда должен работать как можно быстрее, чтобы обеспечить обратную связь с командой.

НО, если вы настаиваете на его использовании, вы можете просто создать какой-то метод / класс, в котором вы отключаете неявное ожидание, выполняете явное ожидание и восстанавливаете значение неявного ожидания.

Что-то вроде этого:

public class Wait {
    private static final int IMPLICIT_WAIT_TIME = 10; //store your default implicit wait here or use .properties file

    private WebDriver driver;
    private int timeout = 10;
    private List<Class<? extends Throwable>> exceptions = new ArrayList<>();

    public Wait(WebDriver driver) {
        this.driver = driver;

        driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); //turn off implicit wait
    }

    public Wait setTimeout(int seconds) {
        this.timeout = seconds;
        return this;
    }

    @SafeVarargs
    public final Wait ignoring(Class<? extends Throwable>... exceptions) {
        this.exceptions.addAll(Arrays.asList(exceptions));
        return this;
    }

    public void until(ExpectedCondition... expectedConditions) {
        WebDriverWait wait = new WebDriverWait(driver, timeout);
        if (exceptions.size() > 0) {
            wait.ignoreAll(exceptions);
        }
        wait.until(ExpectedConditions.and(expectedConditions));

        driver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT_TIME, TimeUnit.SECONDS); //restore implicit wait
    }
}
Другие вопросы по тегам