Selenium/java 正在返回空文本
Selenium/java is returning empty text
我有一个 table,下面是我正在为其编写 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 显示的是空文本。该打印语句之后的断言失败了。我是否以正确的方式进行文本验证?
元素是Angular element. So to extract the text 208 and George you have to induce for the visibilityOfElementLocated()
and you can use either of the following :
- 打印文本 208:
使用 xpath 和 getAttribute("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"));
- 打印文本 乔治:
使用 xpath 和 getText()
:
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());
我有一个 table,下面是我正在为其编写 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 显示的是空文本。该打印语句之后的断言失败了。我是否以正确的方式进行文本验证?
元素是Angular element. So to extract the text 208 and George you have to induce visibilityOfElementLocated()
and you can use either of the following
- 打印文本 208:
使用 xpath 和
getAttribute("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"));
- 打印文本 乔治:
使用 xpath 和
getText()
: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());