Получение веб-элемента из динамического текста

сначала я пишу свой сценарий:

  1. перейдите на http://demo.opencart.com/

  2. поиск айпод

  3. нажмите добавить, чтобы сравнить все найденные элементы

вот мой код (java webdriver pagefactory)

searchresultspage (моя страница объекта)

@FindBy(id = "compare-total")
WebElement numberOfProductToCompare;

public void compareAllItems() {
    for (WebElement compareButtons: compareButton) {
        compareButtons.click();
    }
}

public void areAllItemsClickedCompare() {
    String text = numberOfProductToCompare.getText();
    System.out.println(text);
}

Мой основной тестовый класс

@Test
public void addToCompare() {
    searchresultspage.compareAllItems();
    searchresultspage.areAllItemsClickedCompare();
}

я нажимаю все кнопки сравнения и хочу получить число из ссылки Product Compare (4), но когда я использую searchresultspage.areAllItemsClickedCompare();, тогда System.out.println(text); напиши мне Product Compare (0), даже этот метод есть после добавления в сравнение (должно быть должно быть Product Compare (4)) Не знаю что делать, совет?


person BV360    schedule 02.02.2016    source источник
comment
добавление задержки после compareAllItems может помочь   -  person parishodak    schedule 02.02.2016
comment
а что за задержка??   -  person BV360    schedule 02.02.2016


Ответы (1)


Подумайте, проблема возникает из-за того, что элемент compare-total захватывается Selenium при создании экземпляра класса, но когда его содержимое обновляется на странице, это не влияет на захваченное значение. Попробуйте захватить элемент compare-total только после того, как все флажки были установлены:

public void areAllItemsClickedCompare() {
    WebElement numberOfProductToCompare = driver.findElement(By.id("compare-total"));
    String text = numberOfProductToCompare.getText();
    System.out.println(text);
}

Где driver — ваш экземпляр WebDriver.

person Dmitry P.    schedule 02.02.2016
comment
Я пытался, как этот автобус все еще был 0 - person BV360; 02.02.2016
comment
@ BV360 тогда проверьте другой подход, возможно, для обновления страницы недостаточно времени. Используйте ожидание: new WebDriverWait(driver, 5).until( ExpectedConditions.textToBePresentInElement(By.id("compare-total"), "Product Compare (4)")); - person Dmitry P.; 02.02.2016
comment
проверит момент, но это не динамическое ожидание, если сравнение продуктов будет ex. 7? - person BV360; 02.02.2016
comment
@ BV360, в этом случае вы получите исключение TimeoutException. Этот подход хорош, если вы хотите проверить, что элемент имеет точное значение. А любые другие значения считаются неверными. Если вы просто хотите увидеть значение, добавьте: driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); к addToCompare() между двумя вызовами методов. - person Dmitry P.; 02.02.2016
comment
у меня ошибка org.openqa.selenium.TimeoutException: Timed out after 10 seconds waiting for text ('Product Compare (4)') to be the value of element located by By.id: compare-total - person BV360; 02.02.2016