无法填补价值因为Capybara没有看到弹出窗口

时间:2018-04-06 10:09:50

标签: ruby automation popup capybara

据我所知,当popup / modal打开时,它位于我打开它的页面顶部,因此当尝试填充其中的值时,不要看它需要做什么。

然后尝试使用中查看内部模态。尝试了其他类,但同样的 Capybara :: ElementNotFound:无法找到可见的css" modal183"

within('modal183') do
        fill_in 'ctl00_ContentPlaceHolder1_tbId', :with => '10'
      end

尝试也找到了xpath,但也没有 Capybara :: ElementNotFound:无法找到可见的xpath" //输入[@id =' ctl00_ContentPlaceHolder1_tbId']"

<div class="modal183">
            <div class="popup_Titlebar" id="PopupHeader">
                <div class="TitlebarLeft">
                    <span id="ctl00_ContentPlaceHolder1_lblTitle">text</span>
                </div>
            </div>
            <div class="popup_Body">

                <div class="popup_TextNoTop">
                    <span id="ctl00_ContentPlaceHolder1_lbl1" class="label-left">text</span>
                    <input name="ctl00$ContentPlaceHolder1$tbId" type="text" id="ctl00_ContentPlaceHolder1_tbId" class="txtInputDec width100" onFocus="ClearTheTextbox(this, &#39;&#39;)" onBlur="FillTheTextbox(this, &#39;&#39;)" onkeypress="return onlyNumbers()" />
                    <span id="ctl00_ContentPlaceHolder1_cmrvIB" style="color:Red;display:none;"><a href='#' class='tooltipCons'><img src='/App_Themes/Default/img/exclamation.png' alt='' /><span>text</span></a></span>
                    <span id="ctl00_ContentPlaceHolder1_revIB" style="color:Red;display:none;"><a href='#' class='tooltipCons'><img src='/App_Themes/Default/img/exclamation.png' alt='' /><span>text
</span></a></span>
                    <span id="ctl00_ContentPlaceHolder1_rvTb" style="color:Red;display:none;"><a href='#' class='tooltipCons'><img src='/App_Themes/Default/img/exclamation.png' alt='' /><span>text</span></a></span>
                    <br />
                    <span id="ctl00_ContentPlaceHolder1_lbl2" class="label-left">text</span>
                    <input name="ctl00$ContentPlaceHolder1$tb1Id" type="text" id="ctl00_ContentPlaceHolder1_tb1Id" class="txtInputDec width100 top5" onFocus="ClearTheTextbox(this, &#39;&#39;)" onBlur="FillTheTextbox(this, &#39;&#39;)" onkeypress="return onlyNumbers()" />
                    <span id="ctl00_ContentPlaceHolder1_rev1IB" style="color:Red;display:none;"><a href='#' class='tooltipCons'><img src='/App_Themes/Default/img/exclamation.png' alt='' /><span>text
</span></a></span>
                    <span id="ctl00_ContentPlaceHolder1_rvTb1" style="color:Red;display:none;"><a href='#' class='tooltipCons'><img src='/App_Themes/Default/img/exclamation.png' alt='' /><span>text</span></a></span>
                </div>
            </div>
            <div class="popup_Buttons">
                <table width="100%" border="0" cellpadding="0" cellspacing="0">
                    <tr>
                        <td align="left">
                            <a onclick="if (!window.event) {this.disabled=true; this.style.color=&#39;grey&#39;; var but = document.getElementById(&#39;btnCancel&#39;); but.disabled=true; but.style.color=&#39;grey&#39;;};" id="ctl00_ContentPlaceHolder1_btnOkay" class="cool-button width80 blue" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$btnOkay&quot;, &quot;&quot;, true, &quot;cons&quot;, &quot;&quot;, false, true))">text</a>
                        </td>
                        <td align="right">
                            <a id="ctl00_ContentPlaceHolder1_btnCancel" class="cool-button width80 black" href="javascript:__doPostBack(&#39;ctl00$ContentPlaceHolder1$btnCancel&#39;,&#39;&#39;)">Atcelt</a>
                        </td>
                    </tr>
                </table>
            </div>
        </div>

已更新: 在我按下按钮后出现的弹出窗口的附加部分。检查此代码上的代码显示。我没有编写这段代码,但试图对它们构建自动化测试:)

<div id="popupparent" style="display: block; height: 1e+06px; left: 0px; top: 0px;">
<script language="javascript" type="text/javascript">


    function resizeIframe(obj) {
        var h = "innerHeight" in window ? window.innerHeight : document.documentElement.offsetHeight;
        var w = "innerWidth" in window ? window.innerWidth : document.documentElement.offsetWidth;

        var doc;
        if (obj.contentDocument) {
            doc = obj.contentDocument;
        } else if (obj.contentWindow) {
            doc = obj.contentWindow.document;
        } else {
            return;
        }

        var childHeight = doc.body.scrollHeight;
        var childWidth = doc.body.scrollWidth;


        obj.style.height = childHeight + 'px';
        var ver = getInternetExplorerVersion();
        var parent = document.getElementById('termsofuse');

        if (ver > -1) {
            parent.style.marginTop = ((h - childHeight) / 2) - 64 + 'px';
        } else {
            parent.style.top = ((h - childHeight) / 2) - 64 + 'px';
        }

        parent.style.left = ((w - childWidth) / 2) + 'px';
        parent.style.display = "block";
        parent.style.visibility = "visible";
    }

<div id="termsofuse" style="left: 1081px; top: 246.5px; display: block; visibility: visible;">
<iframe id="frameeditexpanse" frameborder="0" src="PopDailyCons.aspx?e=c0lEPUMwMDEwMDA3MDQmYUlEPUEwMDQ3ODIxNzAmZGF5PTImY3VyRGF0ZT0yMDE4LjA0JmN1clVzZXI9MTYwJnNvdXJjZT1hdGs=" scrolling="no" marginheight="0" marginwidth="0" class="termsOfUseFrame" style="height: 185px;"> </iframe>
<div class="popup_Buttons" style="display: none">
            <input id="btnOk" value="Done" type="button">
            <input id="btnCancel" value="Cancel" type="button" onclick="hideusertermwindow()">


   

1 个答案:

答案 0 :(得分:0)

您的within调用不起作用,因为您需要将其传递给CSS选择器。您正在通过modal183寻找<modal183>元素,当您真正想要的是.modal183来查找具有类modal183的元素时。

从您的描述中很难准确地说出您正在做什么,但听起来您可能正在谈论在当前选项卡顶部打开的弹出窗口(新浏览器窗口)。如果是这种情况,那么您需要交换窗口以便与

一行进行交互
new_win = window_opened_by do
  # whatever action in the original window causes the popup window to open
  click_button 'blah' 
end

within_window(new_win) do
  fill_in 'ctl00_ContentPlaceHolder1_tbId', :with => '10'
end