7

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

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

因此,Selenium 似乎无法看到指令生成的 html 元素。

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

4

3 回答 3

2

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

于 2013-04-30T11:18:54.873 回答
1

我认为这与角度无关,而是与 Selenium 相关,Selenium 在对其进行任何 JavaScript 操作之前只会拥有初始 DOM。

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

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

为什么 Selenium 找不到动态添加的 DOM 元素? Capybara 不识别动态添加的 DOM 元素?

于 2013-04-30T11:21:38.777 回答
1

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

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

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

应该使用

driver.findElement(By.id("username"));
于 2013-04-29T21:07:44.393 回答