尝试从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']]
答案 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;);
感谢大家的建议和意见。