Контроль за ходом теста. Кастомные ожидания, попапы, алерты, Iframes.

Ожидания

Selenium WebDriver имеет хороший набор стандартных "ожидалок"(waiters), но бывают случаи, когда их недостаточно. В этом случае мы можем написать собственную "ожидалку". В этом нам поможет класс ExpectedCondition.

Как же это работает? Давайте посмотрим на примере.

@Test
public void testExplicitWait()
{
    //Go to Sample Application
    WebDriver driver = new FirefoxDriver();
    driver.get("http://dl.dropbox.com/u/55228056/AjaxDemo.html");
    try {
        //Get the link for Page 4 and click on it, this will call AJAX code
        //for loading the contents for Page 4

        WebElement page4button = driver.findElement(By.linkText("Page4"));
        page4button.click();

        //Create Wait using WebDriverWait.
        //This will wait for 5 seconds for timeout before page4 element is found
        //Element is found in specified time limit test will move to the text step
        //instead of waiting for 10 seconds
        //Expected condition is expecting a WebElement to be returned
        //after findElement finds the
        //element with specified locator

        WebElement message = (new WebDriverWait(driver, 5))
        .until(new ExpectedCondition<WebElement>(){
            @Override
            public WebElement apply(WebDriver d) {
                return d.findElement(By.id("page4"));
            }});
        assertTrue(message.getText().contains("Nunc nibh tortor"));
    } catch (NoSuchElementException e) {
        fail("Element not found!!");
        e.printStackTrace();
    } finally {
        driver.close();
    }
}

Например, если мы захотим что-то выполнить при появлении какого-либо элемента с использованием jQuery, то переопределяемый метод будет выглядеть так:

Еще одной распространенной задачей является работа с всплывающими окнами. Соотвественно нам нужно переключиться на pop-up, выполнить какие-либо действия(ввод данных, проверки и т д), а затем вернуться на родительское окно. Чтобы лучше в этом разобраться выполним простой пример:

Работа с alert окнами

Проводя время в интернете вы не раз сталкивались с ситуациями, когда вы ошиблись при заполнении одного из полей или не выставили галочку где-нибудь, то появлялись окошки, требовавшие все исправить. Вот сейчас мы попробуем научится их отлавливать и взаимодействовать с ними.

Фреймы

Иногда разработчики хотят на одной странице использовать несколько окон или подокон. В разметке таких страниц вы обязательно встретите следующие теги frameset или iframe. Соответственно, автоматизаторам необходимо уметь работать с ними. Помогать находить Selenium элементы в нужном подокне. Попробуем их различить с помощью имени или id. Рассмотрим пример:

Last updated