首页 文章

可以't fill_in value because Capybara don'看到弹出窗口

提问于
浏览
0

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

然后尝试用 within 查看内部模态 . 尝试了其他课程,但同样 Capybara::ElementNotFound: Unable to find visible css "modal183"

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

尝试也找到xpath,但也没有 Capybara::ElementNotFound: Unable to find visible xpath "//input[@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>
                    
<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>

Updated: 附加部分看起来像是按下按钮后出现的弹出窗口 . 检查此代码上的代码显示 . 我没有编写这段代码,但试图在它们上构建自动化测试:)

<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

    你的 within 调用没有't work because you need to pass it a CSS selector. You'传递 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
    

相关问题