我有以下XPath来匹配类span的属性:
//span[@class='amount']
Run Code Online (Sandbox Code Playgroud)
我想匹配class属性为"amount"的所有元素,但也可能有其他类.我以为我能做到这一点:
//span[@class='*amount*']
Run Code Online (Sandbox Code Playgroud)
但这不起作用......我怎么能这样做?
我有一个节点如下:
<span class="portal-text-medium">Office Hours</span>
Run Code Online (Sandbox Code Playgroud)
对于我使用的XPath
//span[text()='Office Hours']
Run Code Online (Sandbox Code Playgroud)
这应该工作,但它永远不会.我可以使用*contains(text(),'Office Hours')]*但是找不到完全匹配,我必须验证没有"*".这不是它唯一不适合我的时间.我之前看到它有用,所以我不知道出了什么问题.任何的想法?
是的,我可以,并且确实使用,starts-with但它并不完全相同.
希望通过此代码块获得$ 2.00的XPath:
<td class="undefined" colspan="6">
<table class="history-bill-payments" cellspacing="0" cellpadding="0" border="0" align="center" width="99%">
<thead>
<tbody>
<tr>
<td valign="top">04/19/2016</td>
<td valign="top" style="text-align:right; height:">
$3.00
<br/>
$2.00
</td>
Run Code Online (Sandbox Code Playgroud)
我尝试了这些但无济于事
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br)]");
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/preceding-sibling::br/text(),'$2.00')]");
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/following-sibling::br/text(),'$2.00')]");
Run Code Online (Sandbox Code Playgroud)
在Firefox中使用firepath,我得到了这个XPath
html / body / div [4] / div [2] / div / div / div / div / div / table / tbody / tr [2] / td / table / tbody / tr / td [2]
我能够得到$ 3.00的xpath
$I->CanSeeElement("//table[contains(tbody/tr[2]/td/table/tbody/tr/td[2]/text(),'$3.00')]");
Run Code Online (Sandbox Code Playgroud) 查看源代码,我的表格数据格式如下:
<tr class="even">
<td>apple</td>
<td>pear</td>
<td>orange</td>
</tr>
<tr class="odd">
<td>apple</td>
<td>pear</td>
<td> </TD>
</tr>
<tr class="even">
<td>apple</td>
<td>pear</td>
<td>orange</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
如何<td>在所有行中匹配包含 ?
我有两个几乎相同的表,唯一的区别是第一个中的输入标记:
表格1
<table>
<tbody>
<tr>
<td>
<div>
<input type="text" name="" value=""/>
</div>
</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
表#2
<table>
<tbody>
<tr>
<td>
<div></div>
</td>
</tr>
</tbody>
</table>
</body>
Run Code Online (Sandbox Code Playgroud)
当我使用这个XPath时,//table//tbody//tr[position()=1 and contains(.,input)]它返回两个表的第一行,而不仅仅是我期望的第一个表第一行.
但是,这个XPath //table//tbody//tr[position()=1]//input只返回input第一个.
那么,我做错了什么?为什么input两个表都相同?我.在某种程度上误用了这里吗?
假设我有一段这样的 HTML:
<a>Ask Question<other/>more text</a>
Run Code Online (Sandbox Code Playgroud)
我可以匹配这段XPath:
//a[text() = 'Ask Question']
Run Code Online (Sandbox Code Playgroud)
或者...
//a[text() = 'more text']
Run Code Online (Sandbox Code Playgroud)
或者我可以使用点来匹配整个内容:
//a[. = 'Ask Questionmore text']
Run Code Online (Sandbox Code Playgroud)
这篇文章.描述了(dot) 和 之间的区别text(),但简而言之,第一个返回单个元素,而后者返回一个元素列表。但这对我来说有点奇怪。因为 whiletext()可以用来匹配列表中的任意一个元素,但对于 XPath 函数来说,情况并非如此contains()。如果我这样做:
//a[contains(text(), 'Ask Question')]
Run Code Online (Sandbox Code Playgroud)
...我收到以下错误:
错误: contains() 的第一个参数所需的基数为一或零
为什么它text()在使用完整匹配(等于)时有效,但在部分匹配(包含)时不起作用?
我试图找出一种基于两个文本字符串使用 XPath 定位元素的方法。有问题的元素可以有文本 A 或文本 B,两者都是有效的,并且我需要根据该文本断言该元素是可见的。所以我需要一个像“//*...[contains(text(), 'A')] OR [contains(text(), 'B')]”这样的 XPath 表达式。这可能吗?这必须使用 XPath 1.0,因为它适用于 Selenium Webdriver。
我还没有找到任何方法来做到这一点,所以我目前正在检查 try-catch 中的第一个字符串,然后断言第二个字符串。