在xPath中的单元格中选择多个元素之一

时间:2013-11-21 00:04:14

标签: php html forms xpath behat

我正在使用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)以及使用“或”,|等的几种变体。我无法弄清楚如何指定多种类型的元素来尝试匹配。

提前致谢! :)

2 个答案:

答案 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