Selenium没有看到AngularJS页面元素

时间:2013-04-29 20:47:33

标签: selenium angularjs angularjs-directive

我在编写Selenium测试以检查我的应用程序时遇到问题。我想测试的是当用户输入正确的登录名/密码时,会显示正确的页面并且用户已登录。

主要问题是我的登录表单是作为AngularJS指令生成的(我有两个不同的登录页面,这个指令在两个地方都被重用),而Selenium似乎无法看到这个指令生成的标记中的元素。 最重要的是,在我用指令生成的常规标记替换之前,测试正在传递此页面。

所以看起来Selenium似乎无法看到由指令生成的html元素。

有任何建议我如何克服这个问题?除了当然还原这个改变引入指令:)

3 个答案:

答案 0 :(得分:1)

页面源将在Angular编译之前显示模板。您应该能够使用Chrome的开发者控制台查看已编译的模板:尝试右键单击元素并选择“检查元素”将其打开。

driver.getPageSource()将因同样的原因失败(它获取未编译的模板),但driver.findElement()应该可以正常工作。

<input id="username" type="text" ng-model="foo"/>

应该使用

找到
driver.findElement(By.id("username"));

答案 1 :(得分:1)

好吧,好像是我误用了Geb和Selenium。我没有指定默认驱动程序,Geb选择了一个不使用AngularJS的驱动程序。在我手动将驱动程序更改为Chrome后,一切都开始有效了。

答案 2 :(得分:1)

我不认为这是与角度相关的,而是与Selenium相关,Selenium在任何JavaScript操作之前都只有初始DOM。

我们已经看到了渲染DOM元素的简单jQuery插件的相同问题。

看看这里的建议是否有帮助:

Why can't Selenium find dynamically added DOM elements? Capybara doesn't recognize dynamically added DOM elements?