我正在尝试找到一个Selenium / PHP XPath来匹配包含多个元素(文本和表单元素)的表行 .
例:
<table class="foo">
<tr>
<td>Car</td><td>123</td><td><input type="submit" name="s1" value="go"></td>
</tr>
</table>
这适用于单个文本元素:
$this->isElementPresent( "//table/tbody/tr/td[contains(text(), 'Car')]" );
虽然这不是(省略/ td定位器):
$this->isElementPresent( "//table/tbody/tr[contains(text(), 'Car')]" );
因此,这显然不适用于多个元素:
$this->isElementPresent( "//table/tbody/tr[contains(text(), 'Car')][contains(text(), '123')]" );
另一种方法是使用 getTable( "xpath=//table[@class='foo'].x.y")
,每行x,列y . 很麻烦,但它很有用......它不会返回 <input>
标签!它将为该单元格返回一个空字符串:(
有任何想法吗?
5 回答
在我的问题中,我有一个产品列表,其中由一个独特的SKU /目录组合识别 . 如果我想将该产品添加到购物车,我选择了SKU和目录 .
使用foob.ar的例子:
您可以将其与dman的解决方案结合使用,以选择该行中的特定元素/列
编辑:
如果我只在任何列中查找这两个值,则上述解决方案有效 . 如果要查找相对于特定列的值,我必须稍微修改它
这个
XPath
表达式:/html/body/table[descendant::td[contains(.,'Car')]]
Note :如果您知道自己的架构,请不要使用启动
//
运算符 . 使用字符串值而不是文本节点(这样您就可以获得所有后代文本节点的串联) .几个路径可以与|组合分隔器 . 调整一下:
你可能想用
// td [contains,'Car']和td [contains,'123'] / ancestor :: tr
这将选择包含与两个包含参数匹配的td的tr
尝试在firefox中使用View Xpath Plugin,非常有用的插件 .
在Xpath中了解有关Axes的更多信息:http://www.w3schools.com/xpath/xpath_axes.asp
感谢knb的一些语法提示 . 这有点偏离主题,但与导致我在这里的搜索有关...
我有一张表[name | Value ]细胞 . 我需要从前面带有'name'的行中获取值 .
(假的例子,但我寻找的每个链接都有相同的文本,没有ID - 重点是上下文信息在相邻的单元格中)
我可以使用嵌套的[[]]条件检索我想要的按钮:
//table[@id='options']/tbody/tr[td[contains(text(), 'this label')]]/td[2]/a
“获取包含另一个包含我正在寻找的文本的单元格的行中的”a“
我认为这种任务可能是一个常见的情况,所以我在这里发布它