【问题标题】:Selenium/java is returning empty textSelenium/java 返回空文本
【发布时间】:2021-03-12 14:30:13
【问题描述】:

我有一个表格,下面是我正在为其编写 selenium 测试的 html 行的描述:

<mat-row _ngcontent-kgo-c23="" class="mat-row ng-star-inserted" role="row">
    <!---->
        <mat-cell _ngcontent-kgo-c23="" class="mat-cell cdk-column-id mat-column-id ng-star-inserted" role="gridcell">
            <a _ngcontent-kgo-c23="" ng-reflect-router-link="/dir,208" href="/claim/208">208</a>
        </mat-cell>
        <mat-cell _ngcontent-kgo-c23="" class="mat-cell cdk-column-firstName mat-column-firstName ng-star-inserted" role="gridcell">
        George
        </mat-cell>
</mat-row>

这是测试:

List<WebElement> idRows = super.wait(WAIT, INTERVAL).until(driver -> driver.findElements(By.className("mat-column-id")));
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Validate only one row exist in the search result
assertEquals(1,idRows.size());

//The result has is "208" and name "George"
WebElement firstNameInSearchResult = webDriver.findElement(By.className("cdk-column-firstName"));
System.out.println("===========>" + firstNameInSearchResult.gettext()+", " + idRows.get(0));
assertTrue(firstNameInSearchResult.getText().contains("George"));
assertTrue(idRows.get(0).getText().contains(searchId));

System.out.println 显示空文本。并且该打印语句之后的断言失败。我是否以正确的方式进行文本验证?

【问题讨论】:

  • 你的 wevDriver.findElement,找到第一行了吗?还是标题行?
  • 一行不是标题行

标签: java selenium xpath webdriverwait getattribute


【解决方案1】:

元素是Angular 元素。因此,要提取文本 208George,您必须将 WebDriverWait 诱导为 visibilityOfElementLocated(),您可以使用以下任一 Locator Strategies

  • 打印文本208
    • 使用 xpathgetAttribute("innerHTML"):

      System.out.println(new WebDriverWait(webDriver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//mat-cell[@class='mat-cell cdk-column-id mat-column-id ng-star-inserted']/a[contains(@ng-reflect-router-link, 'dir') and contains(@href, 'claim')]"))).getAttribute("innerHTML"));
      
  • 打印文本George
    • 使用 xpathgetText():

      System.out.println(new WebDriverWait(webDriver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//mat-cell[@class='mat-cell cdk-column-firstName mat-column-firstName ng-star-inserted']"))).getText());
      

【讨论】:

  • @Patty 很高兴能为您提供帮助。 Upvote 答案如果这个/任何答案对您/对您有帮助,以造福未来的读者。