Watir находит элемент по xpath, но не по id или классу

Я могу найти элемент, используя его XPath, но не используя его идентификатор, класс или текст. Я не хочу использовать XPath, потому что знаю, что он легко сломается.

Вот как это выглядит:

$browser.div(:xpath => "/html/body/nav/div[1]/div/div[3]/div/div/div[3]/div/div/div[2]/div[1]/div/div[2]/div[2]/div[1]/div[2]/div/div/div").present?
$browser.div(:xpath => "/html/body/nav/div[1]/div/div[3]/div/div/div[3]/div/div/div[2]/div[1]/div/div[2]/div[2]/div[1]/div[2]/div/div/div").click

Возвращает true и нажимает на элемент.

Следуя пути, я нахожу элемент, затем попробуйте использовать его идентификатор, например:

$browser.div(:id => "PaymentSelector").present?
$browser.div(:id => "PaymentSelector").click

Он возвращает ложь и время ожидания, пытаясь нажать. То же самое происходит с текстом или классом.

Элемент не находится внутри фрейма или фрейма.

Почему это произошло и как мне это исправить?

1 ответ

Решение

Как обсуждалось в комментариях, проблема в том, что есть несколько элементов с одинаковым идентификатором. Это можно увидеть по телефону:

$browser.divs(:id => "PaymentSelector").count
#=> 5

Watir возвращает первый соответствующий элемент, который в данном случае оказывается скрытым элементом. Это не тот, который интересует пользователя. Вам нужно создать более конкретный локатор, чтобы возвращался нужный элемент.

Один из вариантов - указать :index так как теперь вы знаете, что это второй:

$browser.div(:id => "PaymentSelector", :index => 2).click

Однако, вероятно, будет более надежным просто найти первый видимый, используя :visible локатор:

$browser.div(:id => "PaymentSelector", :visible => true).click
Другие вопросы по тегам