在 Watir 中,我试图访问出现在 Bootstrap 提供的弹出框内的 a
元素。
只是调用 a(:class, 'my_link').click
不想玩球,所以我添加了行 a(:class, 'my_link').wait_until_present
希望这可能是单击生成弹出窗口的元素和访问其内容之间的时间问题,但这只是在 30 秒后超时并返回该元素永远不会出现。
在等待期间,我可以打开代码检查器并确认该元素确实存在并且可以点击。
我应该提一下,手动执行 Watir 应该执行的步骤是可行的。
我目前的想法
我知道当我尝试使用 jQuery 与此元素交互时,使用常规 .click();
是行不通的,我不得不调用 $('body' ).on('click', ',my_link');
类似的东西可以在这里发挥作用吗?
这可能与元素被错误地归类为不可见有关。
如有任何指导,我们将不胜感激。
代码
这是从弹出框内部生成的代码:
<div class="popover fade bottom in" style="top: 40px; left: 424px; display: block;">
<div class="arrow"></div>
<div class="popover-inner">
<h3 class="popover-title"></h3>
<div class="popover-content">
<!-- SNIP -->
<p>
<a class="my_link">My Link</a>
</p>
</div>
</div>
</div>
弹窗由点击生成;
$('.nav-popup').popover('show');
这里是Watir测试的相关部分;
span(:class, 'nav-popup').click
a(:class, 'my_link').wait_until_present
a(:class, 'my_link').click
为了检查我是否可以与弹出窗口交互,我将以下内容添加到我的 Watir 测试中;
quick_log = a(:class, 'my_link').html
binding.pry
当 pry 开时,我可以看到 quick_log
包含正确的 HTML 内容,这很烦人,因为下一行是 a(:class, 'my_link').wait_until_present
它在上面乱搞。
错误信息
线
a(:class, 'my_link').click
生成;
Selenium::WebDriver::Error::ElementNotVisibleError:
Element is not currently visible and so may not be interacted with
最佳答案
给出你的答案,那么我会简单地做而不是两行代码
browser.div(:class, 'popover-content').a(:class, 'my_link').click
鉴于它是由 javascript 动态创建的,您可能必须投入一些东西来同步并等待元素生成
browser.div(:class, 'popover-content').when_present.a(:class, 'my_link').click
关于ruby-on-rails - 在 Bootstrap 弹出框内使用 Watir .click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014192/