我在编写Selenium测试以检查我的应用程序时遇到问题。我想测试的是当用户输入正确的登录名/密码时,会显示正确的页面并且用户已登录。
主要问题是我的登录表单是作为AngularJS指令生成的(我有两个不同的登录页面,这个指令在两个地方都被重用),而Selenium似乎无法看到这个指令生成的标记中的元素。 最重要的是,在我用指令生成的常规标记替换之前,测试正在传递此页面。
所以看起来Selenium似乎无法看到由指令生成的html元素。
有任何建议我如何克服这个问题?除了当然还原这个改变引入指令:)
答案 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?