#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, прежде чем пытаться взаимодействовать с любыми элементами, отображаемыми на экране в ответ на наведение курсора мыши или щелчок