Привет, я пытаюсь получить доступ к элементу DIV с помощью watir, но я не могу этого сделать, я пробовал разными способами, но не смог получить к нему доступ, может быть, я думаю, что доступ через какой-то родительский элемент может кто-нибудь мне помочь ?

 My system Configurations
 IE-8
 Windows 7

enter image description here

Я пробовал с помощью следующей команды @ie.div(:text,'COMPOSE').click команда выполняется без ошибок, но в пользовательском интерфейсе не выполняется никаких действий

-2
khan 27 Фев 2015 в 20:00

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')
1
Justin Ko 27 Фев 2015 в 18:37

На странице может быть более одного элемента с текстом «СОСТАВИТЬ», некоторые могут быть скрыты. Пытаться:

@ie.divs(:text,'COMPOSE').size

Это div с буквой s. Затем вы можете попробовать что-то вроде следующего и посмотреть, изменится ли пользовательский интерфейс:

@ie.divs(:text,'COMPOSE').each { |b| b.fire_event('click') }

Я помню, что fire_event работает лучше, но я бы рекомендовал ознакомиться с документацией, чтобы узнать о разнице между .click и fire_event.

0
orde 28 Фев 2015 в 01:15