Привет, я пытаюсь получить доступ к элементу DIV с помощью watir, но я не могу этого сделать, я пробовал разными способами, но не смог получить к нему доступ, может быть, я думаю, что доступ через какой-то родительский элемент может кто-нибудь мне помочь ?
My system Configurations
IE-8
Windows 7
Я пробовал с помощью следующей команды @ie.div(:text,'COMPOSE').click
команда выполняется без ошибок, но в пользовательском интерфейсе не выполняется никаких действий
2 ответа
Лучшее решение - переход на Watir-Webdriver. С Watir-Webdriver @ie.div(:text,'COMPOSE').click
будет работать должным образом.
Предполагая, что это не вариант, есть несколько причин, по которым эта же команда не работает с Watir (-Classic) v1.6.7:
- Первая проблема заключается в том, что
@ie.div(:text,'COMPOSE').click
найдет первый div, содержащий этот текст. Это будет один из предков нужного вам div. В результате Watir отправит событие щелчка не на тот элемент. - Вторая проблема заключается в том, что div не отвечает на событие onclick, запущенное Watir. Я не уверен, почему существует эта проблема.
Чтобы решить первую проблему, вам нужно будет более точно определить местонахождение div. В этом случае можно использовать атрибут «роль», поскольку ни один из элементов-предков не имеет этого атрибута. Watir-Classic не поддерживает использование атрибута роли в качестве указателя. В результате вам нужно будет создать собственный локатор, используя коллекцию элементов и метод find
:
@ie.divs.find{ |div| div.attribute_value('role') == 'button' && div.text == 'COMPOSE' }
Для решения второй проблемы оказалось, что двойной щелчок действительно работает. Хотя в более новых версиях Watir-Classic реализован метод double_click
, в 1.6.7 его нет. Вы можете воспроизвести метод, вызвав метод fire_event
:
.fire_event('ondblclick')
Собрав все это вместе, следующее будет щелкать по кнопке создания:
@ie.divs.find{ |div| div.attribute_value('role') == 'button' && div.text == 'COMPOSE' }.fire_event('ondblclick')
На странице может быть более одного элемента с текстом «СОСТАВИТЬ», некоторые могут быть скрыты. Пытаться:
@ie.divs(:text,'COMPOSE').size
Это div с буквой s. Затем вы можете попробовать что-то вроде следующего и посмотреть, изменится ли пользовательский интерфейс:
@ie.divs(:text,'COMPOSE').each { |b| b.fire_event('click') }
Я помню, что fire_event
работает лучше, но я бы рекомендовал ознакомиться с документацией, чтобы узнать о разнице между .click
и fire_event
.
Похожие вопросы
Новые вопросы
html
HTML (язык гипертекстовой разметки) — это язык разметки для создания веб-страниц и другой информации, отображаемой в веб-браузере. Вопросы относительно HTML должны включать минимальный воспроизводимый пример и некоторое представление о том, чего вы пытаетесь достичь. Этот тег редко используется отдельно и часто в паре с [CSS] и [JavaScript].