WebDriver, чтобы закрыть всплывающее окно после определенного времени - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть тест на основе Selenium WebDriver, который заполняет форму и отправляет ее на обработку. Во время периода обработки окно открывается. Иногда обработка завершается неудачно, но это окно не закрывается, поэтому мы не можем получить результат. Цель этого теста - получить результат. Я пытаюсь установить тайм-аут для этого окна, поэтому оно должно быть закрыто через заданное время (сейчас я установил его на 10 секунд) на WebDriver, и форма должна быть повторно отправлена. Я использую следующий код.

WebElement webElement;
try {
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.findElement(sendButton).click();
    webElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("button-resultdown")));
} catch (TimeoutException ex) {
    webElement = null;
} finally {
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
if (webElement == null) {
    driver.findElement(popUpClose).click();
    TimeUnit.SECONDS.sleep(4);
    driver.findElement(sendButton).click();
}

Всплывающее окно не закрывается автоматически через 10 секунд. Я проверил локаторы элементов, они действительны.

1 Ответ

2 голосов
/ 09 апреля 2019

Рекомендуется не использовать явные и неявные ожидания одновременно, подробнее см. здесь .
Для закрытия всплывающего окна вы можете попытаться нажать, используя JavaScript или подождать, пока popUpClose не будет активным.

JavascriptExecutor js = (JavascriptExecutor) driver;

driver.findElement(sendButton).click();

List<WebElement> elements = waitElements(driver, 5, By.className("button-resultdown"));
if (elements.size() == 0){
    List<WebElement> popUpCloseButtons = driver.findElements(popUpClose);
    System.out.println("Popup Close Buttons size: " + popUpCloseButtons.size());
    if (popUpCloseButtons.size() > 0)
        js.executeScript("arguments[0].click();", popUpCloseButtons.get(popUpCloseButtons.size() - 1));
        //popUpCloseButtons.get(popUpCloseButtons.size() - 1).click();
}

И пользовательский метод ожидания:

public List<WebElement> waitElements(WebDriver driver, int timeout, By locator) throws InterruptedException {
    List<WebElement> elements = new ArrayList<>();
    for (int i = 0; i < timeout; i++) {
        elements = driver.findElements(locator);
        if (elements.size() > 0)
            break;

        System.out.println("Not!");
        Thread.sleep(1000);
    }

    return elements;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...