Как провести тест Selenium, чтобы найти элементы, сгенерированные Angular?

Я в настоящее время беру угловой учебник, использующий структуру Мудрости как основу. Как следствие, я запускаю сквозные тесты, используя Fluentlenium, как утверждает документ мудрости.

Мой тест для шага 3, хотя и очень простой, не проходит.

Полный тест можно найти на github: Step03IsImplementedIT

Однако вот оскорбительная выдержка (около 30 строк)

@Test
public void canTestPageCorrectly() {
    if (getDriver() instanceof HtmlUnitDriver) {
        HtmlUnitDriver driver = (HtmlUnitDriver) getDriver();
        if(!driver.isJavascriptEnabled()) {
            driver.setJavascriptEnabled(true);
        }
        Assert.assertTrue("Javascript should be enabled for Angular to work !", driver.isJavascriptEnabled());
    }
    goTo(GoogleShopController.LIST);
    // Et on charge la liste des téléphones
    FluentWebElement phones = findFirst(".phones");
    assertThat(phones).isDisplayed();

    FluentList<FluentWebElement> items = find(".phone");
    assertThat(items).hasSize(3); // <-- this is the assert that fails
}

Сообщение об ошибке:

canTestPageCorrectly(org.ndx.wisdom.tutorial.angular.Step03IsImplementedIT)  Time elapsed: 2.924 sec  <<< FAILURE!
java.lang.AssertionError: Expected size: 3. Actual size: 1.
    at org.fluentlenium.assertj.custom.FluentListAssert.hasSize(FluentListAssert.java:60)
    at org.ndx.wisdom.tutorial.angular.Step03IsImplementedIT.canTestPageCorrectly(Step03IsImplementedIT.java:33)

Из-за этого сбоя, я думаю, угловые контроллеры не были загружены.

Как я могу убедиться, что они есть? А как мне пройти рабочий тест?

1 ответ

Решение

Выяснилось, что ошибка не была ожидаемой... Ну, она была скрытой.

HtmlUnitDriverКак известно, это чистая Java-реализация браузера и, как таковая, имеет некоторые ограничения.

Одним из его ограничений является интерпретация Javascript, которая, похоже, очень плохо работает с угловым...

Короче говоря, самый простой способ исправить это заменить драйвер по умолчанию на Firefox, который подразумевает

  • установка fluentlenium.browser в firefox
  • убедитесь, что драйвер загружается правильно (так как firefox.exe должен быть в пути при попытке использовать его драйвер), добавив небольшой assert в начале теста

Итоговый тест

    assertThat(getDriver()).isInstanceOf(FirefoxDriver.class);
    goTo(GoogleShopController.LIST);
    FluentList<FluentWebElement> items = find("li");
    FluentLeniumAssertions.assertThat(items).hasSize(3);
    fill("input").with("nexus");
    await();
    items = find(".phone");
    FluentLeniumAssertions.assertThat(items).hasSize(1);
    fill("input").with("motorola");
    await();
    items = find(".phone");
    FluentLeniumAssertions.assertThat(items).hasSize(2);
Другие вопросы по тегам