0

我正在为使用 Vaadin 框架开发的 Java 应用程序编写测试。对于我使用Robot Framework的测试。在某些步骤中,我必须使用机器人框架命令,例如执行 javascript

例如,要查找组件,我必须执行以下命令:

execute javascript    document.getElementById('button-create').click()

哪个工作没有任何问题。像这样Click Element的基元不起作用,因为 Vaadin 不会等到整个页面加载完毕,因此在运行时还没有分配一些 id。

不幸的是,这个应用程序的开发方式使得某些组件不是对事件做出反应,click而是对事件做出反应mousedown。也就是说,在 chrome 的 Java 控制台上,我可以执行以下命令:

    document.getElementsByClassName('table-cell-wrapper')[1].mousedown();

并且动作执行没有任何问题。到目前为止,一切都很好。

不幸的是,当试图在机器人框架上做同样的事情时

    execute javascript    document.getElementsByClassName('table-cell-wrapper')[1].mousedown();

我收到以下错误:

Executing JavaScript:
document.getElementsByClassName('table-cell-wrapper')[1].mousedown();
20131029 12:22:12.445 :  INFO : </td></tr><tr><td colspan="3"><a href="selenium-    screenshot-1.png"><img src="selenium-screenshot-1.png" width="800px"></a>20131029 12:22:12.453 :  FAIL : 
WebDriverException: Message: u'document.getElementsByClassName(...)[1].mousedown is not a function' ;

那么问题是......如何mousedown使用Javascript和Webdriver在给定元素上触发事件。

我的环境是:

RIDE 1.2.1 running on Python 2.7.5. 
Robot Framework 2.8.1
Library           Selenium2Library
Library           Screenshot
Library           Dialogs
Library           Collections

提前致谢。

4

1 回答 1

0

从 Selenium2Library执行 Javascript关键字:

请注意,默认情况下,代码将在 Selenium 对象本身的上下文中执行,因此 this 将引用 Selenium 对象。使用 window 来引用应用程序的窗口,例如 window.document.getElementById('foo')

所以你可能想放在window.那里。

mousedown()不是纯 Javascript 函数。JQuery 确实有一个,并且还有一个mousedown用普通 JS 调用的事件。

如果页面加载后某些元素不存在导致

Click Element    foobar

要失败,您可以使用“等待页面包含元素”,然后单击该元素。您可以编写自己的 Press Element 关键字以使其更有用:

Press Element    ${locator}
    Wait Until Page Contains Element    ${locator}
    Click Element    ${locator}
于 2013-10-29T19:42:35.957 回答