无法fill_in值,因为水豚看不到弹出窗口



据我所知,当弹出窗口/模态打开时,它位于我打开它的页面顶部,所以当尝试在其中填充值时,看不到它需要在哪里这样做。

然后试图用内部观察模态内部。尝试了其他类,但相同的水豚::ElementNotFound:找不到可见的css "modal183">

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

尝试也用 xpath 找到,但也什么都没有Capybara::ElementNotFound: 无法找到可见的 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>
                    <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()">


您的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

最新更新