在 Watir 中,我试图访问a
出现在 Bootstrap 提供的弹出框内的元素。
只是调用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