Watir и текстовое поле внутри iframe - PullRequest
2 голосов
/ 05 марта 2012

Я пытаюсь установить новый текст в текстовое поле, используя Watir. Текстовое поле находится внутри iframe.

<div id="div_popup_layer" style="width: 100%; height: 100%;">
<div id="id_Login" class="ui-draggable" style="position:absolute;left:372.5px;top:279px;width:501px;height:274px;z-index:15">
<table id="popup_cont_id_Login" cellspacing="0" cellpadding="0" topmargine="0">
<tbody>
<tr>
<td align="left" valign="middle">
<iframe id="frame_id_Login" height="274px" frameborder="0" width="501px" allowtransparency="true" src="/sws.login/gnb/loginView.sws?basedURL=undefined&popupid=id_Login" tagtype="popup_iframe" name="frame_id_Login">

Текстовое поле имеет следующий Xpath:

//*[@id="IDUserId"]

Или CSS Path:

html body#POPUP_BODY table#loginBackground tbody tr td form#loginForm table tbody tr td table tbody tr td table tbody tr td div#userIDBlock table tbody tr td table tbody tr td#swsText_body_IDUserId_td.sws_text_normal_body div input#IDUserId.sws_text_input

А в случае HTML это выглядит так:

<div><input type="text" value="" maxlength="63" style="width:142px; " class="sws_text_input" name="IDUserId" id="IDUserId" onfocus=" swsText_styleChangedFocus('IDUserId');" autocomplete="off" tagtype="text"></div>

Я проверил много вариантов без успеха. Например:

browser.frame(:id => "frame_id_Login").text_field(:name => "IDUserId").set "admin"

Возвращает:

/var/lib/gems/1.8/gems/watir-webdriver-0.5.3/lib/watir-webdriver/elements/frame.rb:9:in `locate': unable to locate frame/iframe using {:id=>"frame_id_Login"} (Watir::Exception::UnknownFrameException)

Может ли кто-нибудь помочь мне с этим? Мне нужно поместить любой текст в поле.

Ответы [ 4 ]

3 голосов
/ 05 марта 2012
@browser.text_field(:id => "IDUserId").set "TEXT"
@browser.text_field(:name => "IDUserId").set "TEXT"
@browser.text_field(:class => "sws_text_input").set "TEXT"

Все они будут работать с этим текстовым полем, если оно не содержится во фрейме, и в этот момент вам нужно будет его идентифицировать.

Вы хотите использовать Xpath только как последний результат, так как он хрупок и сложен. Я даже не уверен, работает ли CSS так, как я никогда не пробовал.

Пожалуйста, ознакомьтесь с Книгой WATIR Желько или www.watir.com для базовых методов локатора.

2 голосов
/ 07 июля 2016

Возможно, watir был обновлен с момента публикации этих ответов, но ни один из этих frame методов не помог мне. Я смог успешно использовать метод iframe и взаимодействовать с ним, как и с любым другим объектом. После того, как объект iframe был выбран, я мог вызывать элементы DOM после успешного вызова iframe. Был в состоянии выбрать только объект iframe, используя его тег 'id', хотя он также имел атрибут 'name' ..

browser.text_field(:id => "handle").exists?
#=> false

browser.iframe(:id => "secureform").text_field(:id => "handle").exists?
#=> true
1 голос
/ 06 марта 2012

Рабочий раствор:

browser.frame(:index => 1).text_field(:index => 0).set "admin"

Теперь я пытаюсь понять, почему:)

0 голосов
/ 10 июля 2013

Другое рабочее решение browser.frame (: id => "iFrameID"). text_field (: id => /TextField/).set "data"

НТН

...