使用动态帧查找html页面中的元素

时间:2012-10-11 15:45:20

标签: ruby watir watir-webdriver

我正在使用供应商开发的网页(SAP BusinessObjects InfoView登录页面),并尝试识别并选择页面上的下拉元素。无论我尝试什么,我都有例外:

require 'watir-webdriver'
ie = Watir::Browser.new
ie.goto "http://svr-boj-bop-01.mgc.mentorg.com:8080/InfoViewApp"
ie.select_list(:id, "authenticationSelectBox").select("secLDAP")
#=> 'error: "unable to locate element, using :id=>"authenticationSelectBox", :tag_name=>"select"....'

我安装了FireFox和Firebug,我可以使用Firebug来选择能够提供有关元素信息的元素。我试图指定:id,:name,.div,.browser,。frame,......没有任何改变错误。我怀疑内部框架是根据“身份验证”的选择动态创建页面,但我不知道如何检查/验证是这种情况。

我在网站上搜索并尝试了大部分建议,没有任何帮助。

该页面包含大量Java代码,表单等。以下是我正在尝试搜索元素的页面中的剪辑:

<body onload="logonPageLoad()">
    <div class="logonContainer">
        <div class="logonIFrame">
            <iframe id="infoView_home" width="80%" frameborder="0" align="center" title="Log On to InfoView" name="infoView_home" onload="resizeFrameToContent("infoView_home")" src="jsp/listing/blank.jsp" style="height: 287px;">
                <html class="logon_body">
                    <body class="logon_body" onload="loadInit();">
                        <div class="logon_body">
                            <div id="logonCredentials">
                                <form action="../../../PartnerPlatformService/service/app/logon.object" method="POST" name="logonForm">
                                    <div class="logon_table">
                                        <div id="authentication" class="logon_input">
                                            <label class="logon_input_label" onclick="businessobjects.webutil.accessibility.setFocusOnElement('authenticationSelectBox'); return false;" tabindex="-1" for="authenticationSelectBox"> Authentication: < /label>
                                            <select id="authenticationSelectBox" class="logonSelectBox" onchange="SetAuthType(false);resizeFrameToContent('infoView_home')" name="authType">
                                                <option value="secEnterprise" selected=""> Enterprise `</option>
                                                <option value="secLDAP"> LDAP </option>
                                                <option value="secWinAD"> Windows AD </option>
                                                <option value="secSAPR3"> SAP</option>
                                            </select>

1 个答案:

答案 0 :(得分:2)

对于帧中的元素,您必须显式调出帧:

my_frame = ie.frame(:id, "infoView_home")
my_frame.select_list(:id, "authenticationSelectBox").select("secLDAP")

虽然听起来你可能已经尝试过了。在Watir认为页面加载之前,可能没有加载元素。如果是这种情况,您可以使用when_present方法添加等待。

my_frame = ie.frame(:id, "infoView_home")
my_frame.select_list(:id, "authenticationSelectBox").when_present.select("secLDAP")

请注意,您可以在一行中执行此操作(即您不需要my_frame)。它只是添加,以使其更容易阅读(即最小化水平滚动)。