Выберите один из нескольких элементов в ячейке в xPath

Я использую Behat и пытаюсь выбрать некоторые элементы формы.

Мой HTML выглядит следующим образом: в основном у меня есть два обязательных поля: одно поле ввода, одно текстовое поле и флажок.

<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

И это, очевидно, отлично работает для ввода, но когда я добавил текстовое поле и попытался его проверить, он не смог найти текстовое поле, потому что это не ввод.

Я пробовал это: //table/tbody/tr/td/(input or textarea) и несколько вариантов использования "или", | и т. д. Я не могу понять, как указать несколько типов элементов, чтобы попытаться сопоставить их.

Заранее спасибо! :)


person Jessica    schedule 21.11.2013    source источник


Ответы (2)


Процессор 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

или используйте предикат с name-test при использовании проверки узлов с подстановочными знаками:

//table/tbody/tr/td/*[local-name() = 'input' or local-name() = 'textarea']

Последняя версия, вероятно, будет предпочтительнее с точки зрения производительности, поскольку XML-файл будет сканироваться только один раз.

person Jens Erat    schedule 21.11.2013
comment
Большое спасибо, local-name() - это то, что я искал :) - person Jessica; 21.11.2013

Не тестировался в Behat/PHP, но так это будет выглядеть, если следовать синтаксису XPath.

//table/tbody/tr/td/input | //table/tbody/tr/td/textarea
person MindingData    schedule 21.11.2013