0

我正在尝试使用 cucumber+watir-webdriver 为移动 webapp 编写测试,但是启动消息上的一个特定链接给我带来了麻烦。

我要选择的链接是<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'正在评估为真,因此 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)。

4

1 回答 1

1

由于该按钮是通过 javascript 创建的,我猜 watir 正试图在按钮变得可见之前与它进行交互。尝试显式等待元素。

如果您只想等待链接出现:

browser.link(:class => "btn").wait_until_present

如果您想在链接出现后对其进行操作(例如单击它):

browser.link(:class => "btn").when_present.click
于 2013-09-26T12:42:14.647 回答