我正在尝试使用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路径:
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)
有人可以帮我吗?我需要把任何文字放到这个领域。
答案 0 :(得分:3)
@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是否有效,因为我从未尝试过。
请查看Željko's WATIR book或www.watir.com了解基本定位器方法。
答案 1 :(得分:2)
自从发布这些答案后,watir可能已更新,但这些frame
方法都不适用于我。我能够成功使用iframe
方法,并像其他任何对象一样与之交互。一旦选择了iframe对象,我就可以在iframe调用成功后调用DOM元素。只能使用'id'标签选择iframe对象,即使它也有'name'属性..
browser.text_field(:id => "handle").exists?
#=> false
browser.iframe(:id => "secureform").text_field(:id => "handle").exists?
#=> true
答案 2 :(得分:1)
工作解决方案是:
browser.frame(:index => 1).text_field(:index => 0).set "admin"
现在我想了解原因:)
答案 3 :(得分:0)
另一个有效的解决方案 browser.frame(:id =&gt;“iFrameID”)。text_field(:id =&gt; /TextField/).set"data“
HTH