【问题标题】:protractor cannot find element after angular routing changes角度路由更改后量角器找不到元素
【发布时间】:2022-01-18 02:24:39
【问题描述】:

这让我抓狂:)

我正在使用

"@angular/core": "~11.2.9",
"protractor": "~7.0.0",

我尝试验证非常简单的事情

  1. 我使用 browser.get(url) 导航到 URL
  2. 我找到并选择第一个链接并单击它 - 链接定义为
    <a class="article-list-item"
      *ngFor="let item of items"
      routerLink="/items/{{item.id}}/{{item.version}}">
    
  3. 点击更改页面的路由和角度加载我可以在浏览器中看到的新内容
  4. 量角器超时,因为它无法在新视图中选择子元素

实际上它会打印类似的东西

Failed: script timeout
  (Session info: chrome=96.0.4664.93)
  (Driver info: chromedriver=96.0.4664.45 (76e4c1bb2ab4671b8beba3444e61c0f17584b2fc-refs/branch-heads/4664@{#947}),platform=Mac OS X 11.6.0 arm64)
ScriptTimeoutError: script timeout
  (Session info: chrome=96.0.4664.93)
  (Driver info: chromedriver=96.0.4664.45 (76e4c1bb2ab4671b8beba3444e61c0f17584b2fc-refs/branch-heads/4664@{#947}),platform=Mac OS X 11.6.0 arm64)

这没什么用!

我找到了这个页面https://www.protractortest.org/#/timeouts - 但实际上没有任何帮助,所以问题是为什么量角器不能与角度路由器一起玩?以及我做错了什么。

点击后我执行这段代码

let until = protractor.ExpectedConditions;
return browser.wait(until.visibilityOf(element(by.css(path))), 5000, 'cannot find by ' + path);

整个页面已正确呈现,所以我猜是量角器无法检测到更改。 我还在某处发现,对于这样的动态元素,我应该使用 browser.driver api 而不是浏览器 - 这有点不同,无论如何这也无法检测到动态元素。

我猜问题是它不会轮询和重新创建元素承诺,它只是等到初始承诺被履行,而且永远不会。所以我尝试了类似

return browser.driver.wait(driver => driver.findElement(by.css(path)), timout, "cannot find element by " + path);

如果我在等待之前命中断点,它有时会起作用。

感谢您的帮助 - 这应该会容易得多:D

【问题讨论】:

    标签: angular typescript dynamic protractor


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2015-01-31
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多