【问题标题】:Watir and text field inside iframeiframe 中的 Watir 和文本字段
【发布时间】:2012-03-05 00:38:51
【问题描述】:

我正在尝试使用 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)

有人可以帮我吗?我需要在字段中输入任何文本。

【问题讨论】:

    标签: ruby iframe watir


    【解决方案1】:
    @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 了解基本定位器方法。

    【讨论】:

    • 是的,文本字段放置在 iframe 中。不幸的是,我在处理 iframe 时也遇到了问题。
    【解决方案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
    

    【讨论】:

    【解决方案3】:

    有效的解决方案是:

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

    现在我试图理解为什么:)

    【讨论】:

    • 怎么样:browser.frame(:index => 1).text_field(:id => "IDUserId").set "admin" 很好奇,因为它听起来就像你正在调用的 iframe不是您认为的那个(可能还有另一个,或者 ID 是动态的)。
    【解决方案4】:

    另一个可行的解决方案 browser.frame(:id => "iFrameID").text_field(:id => /TextField/).set "data"

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2012-12-29
      相关资源
      最近更新 更多