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

Jes*_*ica 0 html php 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>
Run Code Online (Sandbox Code Playgroud)

获取表单元素的xpath选择器是:

 //table/tbody/tr/td/input
Run Code Online (Sandbox Code Playgroud)

这显然适用于输入 - 但是当我添加textarea并尝试检查它时,它找不到textarea,因为,它不是输入.

我试过这个://table/tbody/tr/td/(input or textarea)和使用"或",|等的几种变体我无法弄清楚如何指定多种类型的元素来尝试匹配.

提前致谢!:)

Jen*_*rat 5

PHP的XPath处理器仅支持XPath 1.0,它不允许在路径步骤中进行替换.一个有效的XPath 2.0表达式

//table/tbody/tr/td/(input, textarea)
Run Code Online (Sandbox Code Playgroud)

XPath 1.0要求您提供如下所示的完整路径:

//table/tbody/tr/td/input | //table/tbody/tr/td/textarea
Run Code Online (Sandbox Code Playgroud)

或者在使用通配符节点测试时使用带名称测试的谓词:

//table/tbody/tr/td/*[local-name() = 'input' or local-name() = 'textarea']
Run Code Online (Sandbox Code Playgroud)

后一版本可能更适合性能,因为XML文件只扫描一次.