2012-03-15 3 views
1

Я довольно новичок в автоматизации и watir-webdriver, так что простите меня, если я не буду звучать супер техничным.Не удается настроить iframe с помощью watir-webdriver - Ошибка?

Я пытаюсь войти на сайт, и форма входа находится внутри iframe. На той же странице есть еще один iframe, содержащий изображение.

Это HTML:

<body> 
<div class="topbar"> 
<div class="topbarcenter"> 
<ul> 
<li id="logo" class="logo"> 
<div id="provider_logo"> 
<iframe id="logo_iframe" width="192px" height="128px" frameborder="0" src="http://social.onerecovery.com/modules/iframes/html/provider_logo.html?prov=microsites" onload="this.style.visibility = "visible";" style="visibility: visible;" allowtransparency="true"> 
</div> 
</li> 
<li class="login"> 
<iframe id="login_iframe" width="550px" height="70px" frameborder="0" src="http://social.onerecovery.com/modules/iframes/html/login.html" onload="this.style.visibility = "visible";" style="visibility: visible;" allowtransparency="true"> 
<html> 
<head> 
<body> 
<div class="login_container"> 
<div id="login_div"> 
<form class="login_form" action="#" method="post"> 
<input type="text" maxlength="100" placeholder="Email Address..." class="email_input processed" name="email"> 

кстати я использую Watir-WebDriver 0.3.5 и автоматизирующей на хроме 17

, что я попытался было: $b.frame(:id => "login_iframe").form(:class => "login_form").text_field(:name => "email").set("username")

, который я думал бы работать, но в моей командной строке я только что получил ошибку: Watir::Exception::UnknownObjectException: unable to locate element, using {:class=>"login_form", :tag_name=>"form"}

Я также пробовал в dexing iframe, чтобы убедиться, что я был во втором iframe, а не в первом, но он все еще не работает.

Когда я $b.frame(:id => "login_iframe").exists? в командной строке, я получаю true

но когда я $b.frame(:id => "login_iframe").form(:class => "login_form").exists? в командной строке, я получаю false

Дело в том, что у нас есть другая страница, что кто-то может использовать для входа на один и тот же сайт, и единственная разница между этой страницей и этой страницей заключается в том, что на этой странице есть второй iframe, тогда как на другой странице есть только идентификатор iframe и код $b.frame(:id => "login_iframe").form(:class => "login_form").text_field(:name => "email").set("username") работает отлично. Извините, что так долго. Просто хотел убедиться, что я дал достаточно информации. Заранее благодарю за любую помощь.

+0

Два вопроса. (1) Доступна ли страница, которую вы тестируете, общедоступной? Ваш код работает для меня с учетом вашего образца HTML, поэтому мне интересно, является ли это проблемой времени (т. Е. Вы пытаетесь получить доступ к форме до завершения загрузки iframe). (2) Вы имели в виду watir-webdriver 0.5.3 (последние), а не 0.3.5? –

+0

Эй, спасибо за ответ.1) Сайт доступен по адресу http://microsites.onerecovery.com. Я не думаю, что это проблема времени, потому что, когда я запускаю код по строкам в командной строке, я до сих пор не могу настроить таргетинг на форму в iframe. 2) Я использую watir-webdriver 0.3.5, что и было, когда я начал автоматизировать, и я еще не обновился до последней версии. Я очень ценю любое понимание, которое у вас есть в этой проблеме. Благодарю. – jennarae

+0

Ваш оригинальный код отлично работает в Firefox, поэтому я бы предположил, что это ошибка с ChromeDriver. –

ответ

0

Короткий ответ на решение возникшей проблемы заключается в использовании browser.frame(:index => 2) вместо browser.frame(:id => "login_iframe").

Или, если вы хотите немного более надежное решение:

frame = browser.frames.find{ |frame| frame.form(:class => "login_form").exists? } 
frame.form(:class => "login_form").text_field(:name => "email").set("username") 

То есть, я действительно не знаю, почему это работает. Это похоже на то, что элемент управления входами находится внутри invite_iframe, что не похоже на HTML. Я постараюсь копать глубже, но звучит как ошибка для меня.

Похоже, что все фреймы смешаны смешно. Как видно из следующего, количество текстовых полей в каждом iframe не соответствует ожидаемому.

browser.frames.each{ |x| puts x.id + ' - ' + x.text_fields.length.to_s + ' text_fields' } 
#=> logo_iframe - 3 text_fields 
#=> login_iframe - 0 text_fields 
#=> invite_iframe - 2 text_fields 
+0

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

+0

Если это ошибка в хромографе, вам может потребоваться обновить версию хромированной решетки, прежде чем делать что-либо еще. Я бы также подумал о том, чтобы обновить ваш watir-webdriver, появились новые интересные материалы, появившиеся в последних версиях. –

0

Для последних версий, это browser.iframes в котором перечислены все фреймы в текущем окне есть.

browser.iframes.map {|iframe| iframe.src} 

Будет отображено src атрибутов всех фреймов.

Смежные вопросы