Java - Утверждение, что класс содержит текст при переходе на другую страницу с идентичными HTML-шаблонами. - PullRequest
0 голосов
/ 23 октября 2018

Я перемещаюсь с одной страницы на другую.Они оба используют одни и те же шаблоны, с той лишь разницей, что текст содержится в классе .image-header__title.Я хочу выбрать ссылку, чтобы перейти на другую страницу и подтвердить, что она пришла на нужную страницу, с помощью .gettext (), как показано ниже:

@Test
public void When_I_Click_patterns_page_is_returned() {
    driver.get("https://test.co.uk/fabric-range/");
    String actualString = fp.ClickPattern().getText();
    assertTrue(actualString.contains("Semi-plain Fabrics"));
}


public WebElement ClickPattern() {
    driver.findElement(By.cssSelector(".image-blocks .image-blocks__items .image-blocks__item:nth-child(7) a")).sendKeys(Keys.ENTER);

    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(20, TimeUnit.SECONDS)
            .pollingEvery(1, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);

    WebElement fabricType = wait.until(driver -> driver.findElement(By.cssSelector(".image-header__inner .image-header__content .image-header__title")));

    return fabricType;
}

Я жду, когда файл .image-header__title перейдет кприсутствовать, однако, поскольку этот элемент находится на начальной целевой странице, метод getText () возвращает текст не со второй страницы, а с первой.

Можно ли в любом случае дождаться загрузки второй страницы перед выполнением метода getText ()?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Да, используйте ExpectedConditions#stalenessOf.

  1. Получить ссылку на элемент на странице 1, e
  2. Запустить действие, которое изменяет страницы
  3. Подождите, пока e не устареет
  4. Продолжите сценарий на странице 2

public WebElement ClickPattern() {
    WebElement e = driver.findElement(By.cssSelector(".image-blocks .image-blocks__items .image-blocks__item:nth-child(7) a"));
    e.sendKeys(Keys.ENTER);
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.stalenessOf(e));

    return wait.until(ExpectedCondition.visibilityOfElementLocated(By.cssSelector(".image-header__inner .image-header__content .image-header__title")));
}

Не думаю, что вынужно второе ожидание ... но вы могли бы, поэтому я оставил его.

0 голосов
/ 23 октября 2018

Знаете ли вы, перезагружает ли ваше приложение страницу в «sendKeys (Keys.ENTER)» или она просто повторно отображает HTML?Более того, даже если он перезагружает страницу, используются ли события после загрузки для генерации HTML-кода с помощью javascript?

Selenium будет блокировать только во время загрузки страницы, поэтому, если срабатывает «sendKeys (Keys.ENTER)»javascript для повторного рендеринга HTML, тогда он не будет ждать завершения этого процесса, а вместо этого сразу же вернется, и в результате продемонстрирует поведение, которое вы видите.

Чисто для целей отладки (!!!!!) Вы пробовали добавить несколько секунд сна между sendKeys (Keys.ENTER) и "Webdriver wait"?Предполагая, что это приводит к тому, что обновленный текст возвращается, это подтверждает, что ваше приложение не перезагружается, а просто повторно отображает HTML.

Есть ли другой, например индикатор загрузки страницы, который вместо этого может зацепить ваш тест?Если бы это было так, ваше ожидание пока не зациклилось бы, пока индикатор загрузки НЕ отобразится.После того, как это вышло, вы можете продолжать знать, что ваша страница готова к взаимодействию.

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