首页 文章

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

提问于
浏览
-1

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

我的HTML:
$ 445.87
我的定位器:按PRICE = By.xpath(“// div [@ class ='price ng-binding'] [@ ng-hide ='calc.isCalculating'] / text()”);

我的代码:

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 ='price ng-binding'] [@ ng-hide ='calc.isCalculating'] / text()

当我使用我的xpath没有“/ text()”这样// div [@ class ='price 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
    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

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

  • 0

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

    By.cssSelector(“div.priceLine:nth-child(1)> div:nth-child(4)> div:nth-child(2)”); VS. By.xpath(“// div [@ class ='price ng-binding'] [@ ng-hide ='calc.isCalculating']”);

    感谢大家的建议和意见 .

相关问题