Watir: Как мне выполнить функцию JS, которая вызывается через onload через iframe? - PullRequest
1 голос
/ 03 мая 2011

Цель состоит в том, чтобы Watir нажал кнопку, которая работает исключительно через JS.

На главной странице есть iframe, который выглядит примерно так:

<iframe name="uploadfile" id="uploadfile" src="form1.html" frameBorder="0" scrolling="no" height="0" width="100%"></iframe>

form1.html вызывает функцию JS с onload внутри тела, похожую на:

<body onload="submit();" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" class="formx">

, которая затем представляет мне кнопку со значением / id, которое я могу использовать.Я просто не могу понять, как нажимать на эту кнопку через iframe и onload.

Я пытался использовать frame () и fire_event () и напрямую вызывать ее без успеха.Я новичок в Watir и ruby, так что, возможно, это более простой способ сделать это?

Ответы [ 3 ]

1 голос
/ 04 мая 2011

Watir не волнует, создана кнопка на JavaScript или нет.Если он отображается на странице, он может щелкнуть по нему.

Используйте Firebug (или аналогичный инструмент) для проверки кнопки, она должна выглядеть примерно так:

<input type="button" id="click_me">

или:

<button id="click_me">

и вы можете щелкнуть по нему с помощью:

browser.button(:id => "click_me").click

Поскольку кнопка находится в рамке, вы должны указать ее:

browser.frame(:id => "uploadfile").button(:id => "click_me").click
0 голосов
/ 04 мая 2011

Чтобы справиться с нагрузкой, вам может потребоваться, чтобы ваш сценарий спал в течение секунды или около того, чтобы дать клиентскому коду время для выполнения своей задачи.Для этого или используйте некоторые методы, описанные на странице Как ждать с помощью Watir , чтобы дождаться появления кнопки.

Вам не нужно запускать событие onload, еслиЯ знаю, что сам браузер будет делать это, загружая HTML-код для фрейма, единственной деталью будет предоставление достаточного времени для выполнения кода клиентской стороны, прежде чем пытаться использовать какие-либо элементы, созданные этим кодом.

В противном случае единственная «хитрость» при обращении к кнопке - правильно найти и идентифицировать ее в DOM.Если кнопка создается внутри iframe, то, как указано в ответе Желько, вам нужно будет использовать что-то вроде

browser.frame(:id => "uploadfile").button(:id => "click_me").click

Я рекомендую использовать IRB как способ разработки ваших сценариев, так как вы можете проверитьОтдельные команды по одному и посмотреть, что работает.это очень похоже на то, как можно проходить через отладчик, просто чуть больше руководства.

0 голосов
/ 03 мая 2011

Вы хотите получить доступ к главному окну из фрейма? Если это так, попробуйте использовать объект top в JavaScript.

top.document.getElementById("your_button").doSomething()

...