Как класс Selenium ByChained действительно работает?
Я очень смущен тем, чтодокументация для класса ByChained упоминает. Это говорит:
Механизм, используемый для поиска элементов в документе с использованием ряда других поисков. Этот класс найдет все элементы DOM, которые соответствуют каждому из локаторов в последовательности, например, driver.findElements (new ByChained (by1, by2)) найдет все элементы, которые соответствуют by2, и появится под элементом, который соответствует by1.
Также естьвопрос для селена на code.google.com, создан для класса ByChained, где кто-то прокомментировал, сказав, что он предназначен для поиска элементов / элементов с использованием нескольких локаторов.
Я не понимаю Почему by1 и by2 должны быть локаторами двух разных элементов? Когда я впервые наткнулся на этот класс, я почувствовал, что он поможет найти элемент (ы) с помощью различных локаторов. Так что если один локатор не работает, следующий будет работать. Но когда я практически использовал этот класс, он вел себя очень странно и постоянно генерировал NoSuchElementException.
Например, если мой HTML это:
<html>
<body>
<div id="details">
<input id="firstName" class="personName" type="text"/>
</div>
</body>
</html>
Я хочу найти поле ввода, используя два локатора в ByChained:
1. используяBy.id("firstName")
2. используяBy.className("personName")
Итак, мой код становится:
By myBy = new ByChained(By.id("firstName"),By.className("personName"));
driver.findElement(myBy);
При исполнении я получил NoSuchElementException. Я ожидал, что если мой первый By не сработает, он найдет элемент со следующим By в серии.
Может кто-нибудь объяснить, как этот класс работает с примером и в каких сценариях его можно использовать?