2014-10-27 4 views
-1

Попытка получить числовое динамическое текстовое значение из элемента span. Мой тест основан на данных, поэтому для каждого запуска ему нужно получить текст (сумму в долларах) с веб-страницы, а затем сравнить его с ожидаемым значением в excel. По какой-то причине мой код не работает. Помогите решить.Selenium WebDriver Java - невозможно получить динамический текст из тега span

Мой HTML:

$ 445,87

Мой локатора: По цене = By.xpath ("// ДИВ [@ класс = 'цена нг-связывающим'] [@ нг скрыть = 'calc.isCalculating']/текст() ");

Мой код:

WebDriverWait wait = new WebDriverWait(driver, 15); 
    wait.until(ExpectedConditions.presenceOfElementLocated(PRICE)); 

    WebElement actualPriceElm = driver.findElement(PRICE); 
    actualPriceElm.getText(); 

    Assert.assertEquals(actualPriceElm, strExpectedPrice); 

Моя ошибка: Таймаут после 15 секунд ожидания на наличие элемента расположен на: By.xpath: // DIV [@ класс = 'цена нг-связывающим'] [@ ng-hide = 'calc.isCalculating']/text()

Когда я использую свой xpath без «/ text()», как это // div [@ class = 'цена ng-binding]] [@ ng- hide = 'calc.isCalculating'], тогда я получаю следующую ошибку:

Исключение из потока "main" java.lang.AssertionError: expected [445.87] но найдено [[[FirefoxDriver: firefox on W INDOWS (f26e0c00-823f-4d45-8285-014303527524)] -> XPath: // DIV [@ класс = 'цена нг-связывающим'] [@ нг скрыть = 'calc.isCalculating']]]

+0

Это HTML:

$ 445.87
Russ

+0

перед тем, как ждать, что вызывает появление элемента? в ручном тестировании, что бы вы сделали, чтобы сделать динамический элемент присутствующим? – CharlieS

+0

Попробуйте использовать 'By.CssSelector()' – vkrams

ответ

0

Нашли решение. Как отметил Викрам в своем комментарии, мне пришлось использовать cssSelector вместо xPath.

By.cssSelector ("div.priceLine: nth-child (1)> div: nth-child (4)> div: nth-child (2)"); В.С. By.xpath ("// div [@ class = 'цена ng-binding]] [@ ng-hide =' calc.isCalculating ']");

Спасибо всем за ваши предложения и ввод.

0
Wait<WebDriver> wait = new WebDriverWait(driver, 50); 

// DO SOMETHING HERE TO CAUSE ELEMENT TO BE DISPLAYED (ie click, hover, mousemove, etc) 

wait.until(new Function<WebDriver, Boolean>() { 
    public Boolean apply(WebDriver driver) { 
     return (driver.findElement(By.xpath("//div[@class='price ng-binding'][@ng-hide='calc.isCalculating']/text()"))).isDisplayed(); 
    } 
}); 
+0

По какой-то причине я не могу подключить этот кусок кода. Я получаю следующее: Метод до (Function ) в типе Wait не применим для аргументов (новая функция () {}). Какой пакет функций это? – Russ

+0

com.google.common.base.Function – CharlieS

+0

вы можете использовать свой собственный wait.until(), нужно что-то сделать, чтобы страница динамически обновлялась .. – CharlieS

0

Ваш xpath //div[@class='price ng-binding'][@ng-hide='calc.isCalculating']/text() возвращает текст 445.87, в то время как вам нужно найти WebElement и получить его текст. Вы пытались использовать Assert.assertEquals(actualPriceElm.getText(), "445.87");?

+0

Хорошо, я попробовал это, но больше не повезло. \t \t WebDriverWait wait = новый WebDriverWait (драйвер, 60); \t \t wait.until (Ожидаемое состояние.текстаToBePresentInElementLocated (PRICE, expectedPrice)); WebElement actualPriceElm = driver.findElement (PRICE); Assert.assertEquals (actualPriceElm.getText(), expectedPrice); Ошибка, которую я получаю: после 60 секунд ожидания текста ('445.87') присутствуют в элементе, найденном By.xpath: // div [@ class = 'цена ng-binding'] [@ ng-hide = 'calc.isCalculating'] – Russ