Selenium WebDriver Java - 无法从span标记获取动态文本

时间:2014-10-27 23:26:34

标签: java selenium xpath webdriver

尝试从span元素获取数字动态文本值。我的测试是数据驱动的,因此对于每次运行,它需要从网页获取文本(美元金额),然后将其与excel中的预期值进行比较。出于某种原因,我的代码不起作用。请帮忙解决。

我的HTML:

$ 445.87

我的定位器:按PRICE = By.xpath(" // div [@class ='价格ng-binding'] [@ ng-hide =' calc.isCalculating&# 39;] /文本()&#34);

我的代码:

    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 [@class ='价格ng-binding'] [@ ng-hide =&# 39; calc.isCalculating'] /文本()

当我使用没有" / text()"的xpath时像这样// div [@class ='价格ng-binding'] [@ ng-hide =' calc.isCalculating']然后我收到以下错误:

线程中的异常" main" java.lang.AssertionError:expected [445.87]但发现[[[FirefoxDriver:firefox on WINDOWS(f26e0c00-823f-4d45-8285-014303527524)] - > xpath:// div [@class ='价格ng-binding'] [@ ng-hide =' calc.isCalculating']]

3 个答案:

答案 0 :(得分: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();
    }
});

答案 1 :(得分:0)

当您需要查找WebElement并获取其文本时,您的xpath //div[@class='price ng-binding'][@ng-hide='calc.isCalculating']/text()会返回文本445.87。您是否尝试使用Assert.assertEquals(actualPriceElm.getText(), "445.87");

答案 2 :(得分:0)

找到解决方案。正如Vikram在评论中提到的,我不得不使用cssSelector而不是xPath。

By.cssSelector(&#34; div.priceLine:nth-​​child(1)&gt; div:nth-​​child(4)&gt; div:nth-​​child(2)&#34;); VS. By.xpath(&#34; // div [@class =&#39; price ng-binding&#39;] [@ ng-hide =&#39; calc.isCalculating&#39;]&#34;);

感谢大家的建议和意见。