Selenium看不到AngularJS的页面元素



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

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

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

有什么建议我可以克服这个问题吗?当然除了恢复这个改变引入指令:)

好吧,看起来这是我滥用Geb与硒。我没有指定默认驱动程序,Geb选择了一个不支持AngularJS的驱动程序。在我手动将驱动程序更改为Chrome后,一切都开始工作了。

页面源代码将显示Angular编译之前的模板。你应该能够看到编译后的模板使用Chrome的开发控制台:尝试右键单击一个元素,并选择'inspect element'打开它。

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

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

应该用

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

我不认为这与angular有关,而是与Selenium有关,Selenium将只在JavaScript对其进行任何操作之前具有初始DOM。

我们在渲染DOM元素的简单jQuery插件中看到过同样的问题。

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

为什么硒不能发现动态添加的DOM元素?Capybara不能识别动态添加的DOM元素?

最新更新