onmouse с помощью якоря на watir, не обнаруживая

#ruby #testing #automation #watir

#ruby #тестирование #автоматизация #watir

Вопрос:

Я пытаюсь навести курсор мыши на выпадающее окно в Watir на ruby.

Я пробовал это, используя оба из двух приведенных ниже сценариев, до сих пор ни один из них не работал.:

 $browser.div(:class => "rolloverMAINMenu").fire_event("onMouseOver")
 

и

 $browser.a(:style=>"background-color:cccccc;width:200px;").fire_event("onMouseOver")
 

HTML:

 <font COLOR="green">
<a style="background-color:cccccc;width:200px;" onmouseover="rolloverMenu(1, 'mainMenu');" onmouseout="rolloverMenu(0, 'mainMenu');"
onclick="rolloverMenu(0, 'mainMenu');">
amp;nbsp;amp;nbsp;<B> Roll Over Menu </B></a>

 <div style="background-color:cccccc;width:200px;" class="rolloverMAINMenu"   id="mainMenu"    style="display: none;" onmouseover="rolloverMenu(1, 'mainMenu');"`
 

Комментарии:

1. Что происходит, когда вы выполняете код, который вы пробовали? Вы пробовали .flash с обоими из них, чтобы убедиться, что вы получаете правильный объект? (поскольку могут быть другие объекты с тем же классом или стилем) Вы пробовали использовать все строчные буквы для имени события (как оно отображается в HTML) вместо camelCase?

2. Первая строка компилируется и ничего не отображается, вторая приводит к ошибке: `assert_exists’: невозможно найти элемент, используя :style, «background-color:cccccc;width:200px;» (Watir::Exception::UnknownObjectException) В данный момент я изо всех сил пытаюсь просто обнаружить его.

Ответ №1:

Для div, поскольку у него есть идентификатор, я бы рекомендовал использовать его для его идентификации, поскольку значения идентификаторов должны (в соответствии со спецификацией HTML) быть уникальными на странице. Это гарантирует, что вы выбрали правильный элемент.

Во-вторых, поскольку код ищет ‘onmouseover’, я бы указал событие таким образом и не использовал camelCase

 browser.div(:id, 'mainMenu').fire_event('onmouseover')
 

Что касается ссылки, то проблема, с которой вы столкнулись, заключается в ее идентификации. Я не вижу :style, указанный в качестве опции для идентификации элементов (хотя потенциально этот документ может быть устаревшим) Я мог бы предложить использовать текст или какой-либо другой аспект, или вам может потребоваться прибегнуть к xpath.

 browser.link(:text, /Roll Over Menu/).fire_event('onmouseover')
 

Или, поскольку ссылка настроена на реакцию на щелчок, вы также можете попробовать это сделать

 browser.link(:text, /Roll Over Menu/).click 
 

Если вы размещаете их в скрипте, поскольку клиент выполняет методы javascript в ответ на события, вам может потребоваться небольшая пауза в сценарии в этот момент, чтобы позволить обновить DOM, прежде чем пытаться взаимодействовать с любыми элементами, отображаемыми на экране в ответ на наведение курсора мыши или щелчок