#html #css #xml #selenium #xpath
Вопрос:
Я запускаю автоматизацию на веб-странице, на которой много элементов в форме:
<label ...>"label name"</label>
<div ...></div>
И мне нужно щелкнуть по <div>
элементу. У меня есть функция, которая находит его с помощью xpath:
driver.findElement(By.xpath("//label[contains(text(),'value')]/following-sibling::div"))
Однако некоторые элементы имеют несколько иную форму. Например, один из них имеет форму:
<label ...>"label name"</label>
<br ...></br>
<input ...></input>
И мне нужно щелкнуть по <input>
элементу. Я не могу просто использовать /following-sibling::*
, потому <br>
что элемент является следующим родным братом.
Я мог бы легко просто написать другую функцию, используя <input>
, но я бы предпочел просто обновить и повторно использовать функцию, которая у меня уже есть (и мне любопытно). Есть ли способ указать, что элемент может иметь одно из нескольких имен тегов?
Может быть, что-то вроде: /following-sibling::[div or input]
Ответ №1:
Этот XPath,
//label[.='l1']/following-sibling::*[self::div or self::input]
будет выбраны все div
или input
родственные элементы, следующие за label
элементом со строковым значением l1
.