【问题标题】:Selenium does not see AngularJS page elementsSelenium 看不到 AngularJS 页面元素
【发布时间】:2013-04-30 19:21:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我遇到了完全相同的问题。我有一个我正在尝试测试的角度网站,但是当我运行 junit 测试时,找不到该元素。我尝试了各种元素定位器。没有工作。

标签: selenium angularjs angularjs-directive


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    应该使用

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

    【讨论】:

    • 不幸的是,事实并非如此。我已经编辑了问题以更清楚。问题是在我添加这个指令生成的标记之前,我的测试在这个页面上通过了。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 2017-06-30
      • 2018-12-09
      • 2021-01-11
      • 2015-08-13
      相关资源
      最近更新 更多