2012-03-05 40 views
2

我試圖用Watir在文本框中設置新文本。文本字段放置在iframe中。Watir和內部框架內的文本字段

<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) 

誰能幫我呢?我需要將任何文字放入現場。

回答

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 bookwww.watir.com瞭解基本的定位方法。

+0

是,文本字段都放在一個iframe中。不幸的是,我也有處理iframe的問題。 – 2012-03-06 00:56:27

1

工作的解決方案是:

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

現在我試圖理解爲什麼:)

+2

那麼: browser.frame(:index => 1).text_field(:id =>「IDUserId」)。set「admin」好奇,因爲它聽起來像你調用的iframe不是你認爲的那個是(可能有另一個,或ID是動態的)。 – 2012-03-06 06:16:42

0

另一種可行的解決方案 browser.frame。(:ID => 「iFrameID」)text_field(: ID => /TextField/).set 「數據」

HTH

2

可能的Watir已經更新,因爲這些答案被張貼,但這些的方法爲我工作。我能夠成功使用iframe方法,並與其他任何對象一樣進行交互。一旦iframe對象被選中,我可以在iframe調用成功之後調用DOM元素。只能夠選擇使用,即使它有一個「名稱」屬性以及它的「身份證」標籤iframe對象..

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

browser.iframe(:id => "secureform").text_field(:id => "handle").exists? 
#=> true 
+1

[frame vs iframes的定位在版本0.6.5中已更改](http://stackoverflow.com/a/21538399/1200545)。 'frame'不再定位'frame'和'iframe'元素。現在需要使用iframe方法來定位iframe元素。 – 2016-07-07 13:21:02

+0

可惜缺乏向後兼容性 – ribamar 2018-03-02 15:29:24