我正在尝试用黄瓜+ watir-webdriver为移动网络应用程序编写测试,但是启动消息上的一个特定链接给我带来了麻烦。
我想要选择的链接是<a class="btn" href="#">Close button</a>
,它是通过javascript在页面上创建的。
我试过这些选择器:
browser.link :text => 'Close button'
browser.link(:class,"btn")
browser.div(:id,"vf_dialog_desc").link(:class,"btn") # with encompassing div
browser.div(:xpath,"//div[@id='vf_dialog_desc']/descendant::a[text()='Close button']")
但是,所有这些都失败并出现错误的变体:
Error: {"message":"Unable to locate an element with the xpath expression (...snip xpath expression...) because of the following error:\nTypeError: Object #<an HTMLDocument> has no method 'evaluate'"}
奇怪的是,browser.html.include? 'Close button'
正在评估为true,因此watir可以访问该元素。
请注意,与其他类似问题不同,此页面不在框架中。
页面结构为:
<html>
<head>...</head>
<body>
<div id="home">
<div id="vf_dialog_holder" class=" show">
(...)
<div id="vf_dialog_wrap">
<h4 id="vf_dialog_head" style="display: block;" class=" vf_dialog_info_icon">Welcome to xpto</h4>
<div id="vf_dialog_desc">
<img src="884857.jpg">
<p>Blurb.</p>
<a class="btn" href="#">Close button</a>
</div>
<div class="clr">
</div>
</div>
我在ruby-2.0.0-p247上运行watir-webdriver(0.6.4)。
答案 0 :(得分:1)
由于按钮是通过javascript创建的,我猜测watir在它变得可见之前尝试与按钮交互。尝试显式等待元素。
如果您只是想等待链接出现:
browser.link(:class => "btn").wait_until_present
如果您想在链接出现后对其进行操作(例如点击它):
browser.link(:class => "btn").when_present.click