如何使用Selenium 2测试基于JavaScript的应用程序,例如Ember.js?

如何使用Selenium 2测试基于JavaScript的应用程序,例如Ember.js?,javascript,selenium,ember.js,phpunit,selenium-webdriver,Javascript,Selenium,Ember.js,Phpunit,Selenium Webdriver,我已经创建了一个基于JavaScript的应用程序,由Ember.js框架提供支持。现在,我想为应用程序创建Selenium 2测试。但是,我遇到了以下问题: 测试应该与默认情况下页面上不存在的按钮或输入字段交互。换句话说,有一个Ember.js视图,它仅在某个操作之后显示。无论如何,当我执行操作并输入所需的视图时 然后,我想单击test中的按钮,如下所示(Selenium 2 test是用PHP编写的): 不幸的是,我得到了以下错误: PHPUnit_Extensions_Selenium2T

我已经创建了一个基于JavaScript的应用程序,由Ember.js框架提供支持。现在,我想为应用程序创建Selenium 2测试。但是,我遇到了以下问题:

测试应该与默认情况下页面上不存在的按钮或输入字段交互。换句话说,有一个Ember.js视图,它仅在某个操作之后显示。无论如何,当我执行操作并输入所需的视图时

然后,我想单击test中的按钮,如下所示(Selenium 2 test是用PHP编写的):

不幸的是,我得到了以下错误:

PHPUnit_Extensions_Selenium2TestCase_WebDriverException:元素当前不可见,因此可能无法与之交互

这是因为Ember.js(或任何其他JavaScript工具)动态插入代码吗?在执行单击操作之前,我试着睡了一两秒钟,但没有效果


我如何解决这个问题,并用Selenium 2测试JavaScript客户端应用程序(在我的例子中是用Ember.js编写的?

因此,如果您执行应该用按钮显示视图的操作,然后在执行单击之前等待10、60秒,您仍然会收到相同的消息?是的,这就是重点。嗯,我没有尝试60秒,但即使是10秒也没用。因此,当您运行代码时,您可以清楚地看到按钮出现,然后在睡眠超时后,代码尝试单击
myButton
时,您会看到粘贴的错误吗?顺便说一句,这个网站可以公开访问吗?是的,你说到点子上了。测试的应用程序非常复杂,所以我不会粘贴它,但它会在普通的把手模板中呈现按钮。测试套件很简单,如下所示:按钮肯定找到了,因为套件不会在第一行抛出错误。只有在尝试单击时才会显示错误-信息为“否”,按钮不可见。您使用的是什么驱动程序?我使用了Phantom.js(0.90),但我没有设法通过Ajax调用添加元素。它与Chrome驱动程序配合得很好,没有使用默认的Firefox驱动程序进行测试。
$button = $this->byId("myButton");
$button->click();