角度路由更改后量角器找不到元素

Posted

技术标签:

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

这让我抓狂:)

我正在使用

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

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

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

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

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

【问题讨论】:

【参考方案1】:

我想我会搬到 cypress,查看此指南 https://offering.solutions/blog/articles/2021/09/30/adding-eslint-and-cypress-to-a-new-angular-project/ 以设置项目

【讨论】:

以上是关于角度路由更改后量角器找不到元素的主要内容,如果未能解决你的问题,请参考以下文章

使用量角器切换到 iframe 后找不到使用定位器错误的元素

量角器:by.model 在自定义指令中找不到元素

量角器+故事书:失败:使用定位器找不到元素:By(css选择器)

成功解决后,带有打字稿的量角器找不到模块“量角器”

找不到元素的元素

错误:找不到模块 'jasmine-expect' [量角器]