【问题标题】:Cypress Newbie : Unfound Elements赛普拉斯新手:未发现的元素
【发布时间】:2018-11-06 13:21:16
【问题描述】:

刚刚开始使用 Cypress,并在 Protractor/Jasmine 中获得乐趣。总体上运行良好,使用 Cypress UI(Chrome 和 Electron)进行测试运行良好。

但是,当我在 VS Code 或 VSTS 管道中运行 headless Electron 时,会出现未找到的元素错误。在浏览器中运行时,这些元素“在你面前”,所以我不确定问题是什么。

这是一个示例 - (之前的规范会加载 URL)

describe('OBM Smoketests', function() {
it('Select Hotel and Enter Search Dates', function() {


    cy.get('.jss189 > div > .jss69 > .jss230 > .jss72').click({force: true});

    cy.get('[value="OBMNG3"]').click();
    cy.wait(1000);


});
});

我一直在使用 Selector Playground,可以看出,尝试了“强制”。这是错误:

1) OBM Smoketests Select Hotel and Enter Search Dates:
 CypressError: Timed out retrying: Expected to find element: '.jss189 > div > .jss69 > .jss230 > .jss72', but never found it.
  at Object.cypressErr (http://localhost:58691/__cypress/runner/cypress_runner.js:62993:11)
  at Object.throwErr (http://localhost:58691/__cypress/runner/cypress_runner.js:62958:18)
  at Object.throwErrByPath (http://localhost:58691/__cypress/runner/cypress_runner.js:62985:17)
  at retry (http://localhost:58691/__cypress/runner/cypress_runner.js:56601:16)
  at http://localhost:58691/__cypress/runner/cypress_runner.js:48711:18
  at tryCatcher (http://localhost:58691/__cypress/runner/cypress_runner.js:124200:23)
  at Promise._settlePromiseFromHandler (http://localhost:58691/__cypress/runner/cypress_runner.js:122218:31)
  at Promise._settlePromise (http://localhost:58691/__cypress/runner/cypress_runner.js:122275:18)
  at Promise._settlePromise0 (http://localhost:58691/__cypress/runner/cypress_runner.js:122320:10)
  at Promise._settlePromises (http://localhost:58691/__cypress/runner/cypress_runner.js:122395:18)
  at Async._drainQueue (http://localhost:58691/__cypress/runner/cypress_runner.js:119124:16)
  at Async._drainQueues (http://localhost:58691/__cypress/runner/cypress_runner.js:119134:10)
  at Async.drainQueues (http://localhost:58691/__cypress/runner/cypress_runner.js:119008:14)
  at <anonymous>

有人给点建议吗? 谢谢

更多信息

虽然在 Electron 中无头运行时,控制台输出表明已找到三个规范,并且似乎一个接一个地运行它们,但我已经尝试过

cypress run --headed

...现在我看到在第一个规范运行后,浏览器关闭并重新启动下一个规范...假设浏览器保持打开状态...就好像您正在执行Selenium 中的相同内容!

必须有一种方法可以同时运行规范,而不必重新打开浏览器......或者它是长规范的情况?

【问题讨论】:

  • 您是否尝试过在屏幕上找到更简单的元素?在dom层次结构中没有那么深的东西。如果你能做到这一点,那么我会尝试迭代你的选择器直到它中断。在我可以看到元素之前,我感到很奇怪,但是浏览器/柏树对应用到它的 css 不满意。当你无头运行时,你可能还想查看你运行的是什么版本的东西。 AFAIK 无头版和 UI 版使用两种不同的实现。
  • 您的任何测试都有效吗?这里发生了一些奇怪的事情。你能看到带有测试等的页面标题吗?一些简单的事情。
  • @Maccurt - 嗨...是的,测试在 Chrome 和 Headed Electron 中运行良好。共有三种规格,这是中间的。

标签: javascript cypress


【解决方案1】:

如果在第一个 cy.get 之后放置 wait(1000) 会怎样?

您可以将选择器游乐场用于第一个元素吗? (.jss189 > div > .jss69 > .jss230 > .jss72) 再试一次?

【讨论】:

    【解决方案2】:

    我建议为您想要获取的元素设置一个唯一的测试 ID。类似的东西

    data_cy = element1

    然后像这样使用get函数

    cy.get('[data_cy=element1]').click()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多