【问题标题】:Unable to click on a button/link on mobile view (iOS) via Appium using Capybara无法使用 Capybara 通过 Appium 在移动视图(iOS)上单击按钮/链接
【发布时间】:2015-11-19 06:28:47
【问题描述】:

无法使用 Capybara 通过 Appium 在移动视图 (iOS) 上单击按钮/链接

我的设置:

我正在移动视图 (iOS) 上测试网站。在桌面上它工作正常(使用 Capybara),但是当我使用 Capybara 通过 Appium 在移动视图(iOS)上进行测试时,测试卡在一个按钮上,该按钮可见但 Capybara 无法单击它。

HTML:

<div id="HeaderContent" class="accordion-content" style="display: block;">        

<div id="CompMessageContainer" class="content row hidden">
    <div role="alert" aria-atomic="true" aria-relevant="all" aria-live="assertive">
        <div class="uiMessaging alert-box radius success" id="ui-alert-message">
            <div>
                <div>
                    <div class="positiveCompMessageIcon"></div>
                </div>
                <div>
                    <div id="CartAlertMessage">

                    </div>
                    <ul id="cartAlertMessageDetails" class=" hidden">                            
                    </ul>
                </div>
            </div>
        </div>
    </div>
</div>
<div id="milAndFirstRespContent">
    <div id="cartBottomAlternateDiscountOptions">
        <div id="compText">
            Random Text.
        </div>
        <div class="desktopComp-btn-container">
            <a id="imgMil" href="#" class="login-trigger left utrack" data-scope="mil" data-track-event="CompTrigger">
                <div class="desktopCompMilBtn"></div>
            </a>
            <a id="imgResp" href="#" class="login-trigger left utrack" data-scope="responder" data-track-event="CompTrigger">
                <div class="desktopCompRespBtn"></div>
            </a>
            <div class="desktopCompLogo"></div>
            <div id="desktopCompVerified" class="hidden">
                <div class="desktopCompVerified"></div>
                <div id="desktopCompStatus">&nbsp;Status Verified</div>
            </div>
        </div>
        <div>

        </div>
    </div>
</div>
    </div>

我尝试单击&lt;div class="desktopCompMilBtn"&gt;&lt;/div&gt; 按钮或a id="imgResp" 元素。

pry(#<Object>)> find("div.desktopCompMilBtn").visible?
=> true

pry(#<Object>)> find("div.desktopComp-btn-container").visible?
=> true

pry(#<Object>)> find("div.desktopComp-btn-container").find("div.desktopCompMilBtn").visible?
=> true

pry(#<Object>)> find("div.desktopComp-btn-container").find("div.desktopCompMilBtn").click
=> nil

pry(#<Object>)> find("div.desktopComp-btn-container").find("a#imgMil").visible?
=> true

pry(#<Object>)> find("div.desktopComp-btn-container").find("a#imgMil").click
=> nil

pry(#<Object>)> find("div.desktopComp-btn-container").find("a#imgMil").find("div.desktopCompMilBtn").click
=> nil

不幸的是,到目前为止,在能够单击该按钮方面没有任何效果。顺便说一句,按钮应该打开一个新窗口,不确定是否重要。

【问题讨论】:

  • 您是否假设 click 如果单击元素会返回不同的内容?
  • 嗯...不...它应该像常规链接/按钮一样单击...这反过来应该打开一个新窗口
  • 好的——所以不要显示单击返回 nil(这并不表示错误,因为它很可能在成功单击某些内容时),请显示您实际遇到的测试和失败,以及与应该由点击触发的JS
  • 好吧,技术上没有失败,我只是无法让 Capybara 在点击该按钮后打开窗口,这让我相信它没有点击它或不是正确的元素?
  • 我的猜测是它正在单击它,但该操作被 Safari 阻止 - 请参阅下面的答案

标签: selenium-webdriver capybara appium


【解决方案1】:

如果没有实际测试失败的详细信息和绑定到点击的 JS,就不可能 100% 确定您遇到了什么问题。 #click 返回 nil 的事实并不意味着链接/div 未被点击。在这种情况下,它更有可能被点击了,但应该处理点击的 JS 并没有按照您的预期执行,因为 iOS 中的 Safari 会阻止弹出窗口由除真实用户点击之外的任何东西启动 - 请参阅 @987654321 @

您可以通过让点击处理程序做一些不同的事情来确认这种情况(警报、更改元素的颜色等)并确认它确实被调用了

【讨论】:

  • 感谢汤姆的帮助,你让我走上了解决这个问题的道路!
  • 我会接受这是官方的回答,但对于那些有同样问题的人,这里是解决方法:转到 Safari 中的首选项菜单,在安全选项卡下,取消选中“阻止弹出-up windows”,这将解决问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多