角度路由更改后量角器找不到元素
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 后找不到使用定位器错误的元素