我正在使用Behat并尝试选择一些表单元素。
我的HTML如下 - 基本上我有两个必填字段,一个是输入,一个是textarea,还有一个复选框。
<table class="table">
<thead>
<tr>
<th>Delete</th>
<th>Question</th>
<th>Reference</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" name="delete" /></td>
<td><textarea name="question" required="required"></textarea></td>
<td><input type="text" required="required" name="reference" /></td>
</tr>
</tbody>
</table>
获取表单元素的xpath选择器是:
//table/tbody/tr/td/input
这显然适用于输入 - 但是当我添加textarea并尝试检查它时,它无法找到textarea,因为duh,它不是输入。
我试过这个://table/tbody/tr/td/(input or textarea)
以及使用“或”,|等的几种变体。我无法弄清楚如何指定多种类型的元素来尝试匹配。
提前致谢! :)
答案 0 :(得分:5)
PHP的XPath处理器仅支持XPath 1.0,它不允许在路径步骤中进行替换。有效的 XPath 2.0 表达式将是
//table/tbody/tr/td/(input, textarea)
XPath 1.0 要求您提供如下所示的完整路径:
//table/tbody/tr/td/input | //table/tbody/tr/td/textarea
或在使用通配符节点test时使用带名称测试的谓词:
//table/tbody/tr/td/*[local-name() = 'input' or local-name() = 'textarea']
后一版本可能更适合性能,因为XML文件只扫描一次。
答案 1 :(得分:1)
在Behat / PHP中未经测试,但如果遵循XPath语法,这就是它的样子。
//table/tbody/tr/td/input | //table/tbody/tr/td/textarea