Cal*_*lle 2 java selenium xpath
我有以下HTML代码,我需要检查表格单元格中是否存在文本:
<div class="background-ljus" id="AutoText">
<table class="topAlignedCellContent">
<tbody>
<tr>
<td>X1</td>
</tr>
<tr>
<td>X2</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>Y1</td>
<td>Y2</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>Z1</td>
<td>Z2</td>
</tr>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
我已经解决了这个问题:
By locator = getLocator(CommonConst.XPATH, "*//div[@" + type + "='" + anyName + "']");
fluentWait(locator);
WebElement div = getDriver().findElement(locator);
List<WebElement> cells = div.findElements(By.tagName("td"));
for (WebElement cell : cells) {
if (cell.getText().contains(cellText)) {
foundit = true;
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为它有点慢,因为我需要多次这样做.我试图用XPath做这个,但没有运气.
"*//div[@id='AutoText']//td[contains[Text(), 'celltext']]"
"*//div[@id='AutoText']//table//tbody//tr[td//Text()[contains[., 'celltext']]"
Run Code Online (Sandbox Code Playgroud)
任何人都有一个关于为什么我的XPath不工作的建议?
错误:
*//div[@id='AutoText']//td[contains[Text(), 'celltext']]
*//div[@id='AutoText']//table//tbody//tr[td//Text()[contains[., 'celltext']]
Run Code Online (Sandbox Code Playgroud)
正确(更短的选择):
//div[@id='AutoText']//td[contains(text(), 'celltext')]
//div[@id='AutoText']//td[contains(., 'celltext')]
//div[@id='AutoText']/table/tbody/tr[td//text()[contains(., 'celltext')]
//div[@id='AutoText']/table/tbody/tr[td[contains(., 'celltext')]]
Run Code Online (Sandbox Code Playgroud)
contains() 是一个功能text() 需要小写//当你不需要时不要使用注意
.指的是"这个节点",当作为一个参数给出一个字符串函数,如contains(),是等价的string(.).然而,这与...完全不同text().
string(.)无论嵌套有多深,都会创建当前节点内所有文本节点的串联.text()是节点测试,默认情况下仅选择直接子节点.
换句话说,如果当前节点是<td>foo <b>bar</b> baz</td>,则contains(text(), 'bar')实际上是假的.(那样contains(text(), 'baz'),出于不同的原因.)
contains(., 'bar')另一方面,它会返回true,所以会contains(., 'baz').
仅当当前节点仅包含单个文本节点时,text()并且.是等效的.大多数时候,你会想要.而不是text().相应地设置谓词.
| 归档时间: |
|
| 查看次数: |
15781 次 |
| 最近记录: |