赛普拉斯测试因断言等于 DOM 标题而失败

Posted

技术标签:

【中文标题】赛普拉斯测试因断言等于 DOM 标题而失败【英文标题】:Cypress test fails for asserting equal to DOM title 【发布时间】:2020-05-30 08:09:12 【问题描述】:

处理使用@vue/cli 4.2.2 和Vue CLI Electron Plugin Builder 创建的项目。 Vue CLI 使用htmlWebpackPlugin 自动在public 目录中生成index.html。相关index.html 页面的</title> 具有<%= htmlWebpackPlugin.options.title %> 语法,可自动从vue.config.js 文件中检测页面标题。

vue.config.js

module.exports = 
  pluginOptions: 
    electronBuilder: 
      chainWebpackRendererProcess: config => 
        config.plugin("html").tap(args => 
          args[0].title = "Stack Overflow";
          return args;
        );
      
    
  
;

问题在于,当应用启动时,页面标题从 *** 变为 Stack Overflow 时会出现毫秒闪烁。为了防止这种情况,我使用了如下所示的 Electron page-title-updated 钩子来确保应用标题正确加载。

main.js

var win = new BrowserWindow(
  width: 800, 
  height: 600,
  title: 'Stack Overflow'
);

win.on('page-title-updated', (evt) => 
  evt.preventDefault();
);

效果很好,现在</title> 中没有窗口闪烁,但是当使用 Cypress 运行 e2e 测试时,它只是找不到正确的标题 Stack Overflow 并且测试失败。 test.js

describe("My First Test", () => 
  it("ensures the correct title", () => 
    cy.visit('/').title().should('eq', 'Stack Overflow')
  )
);

Cypress 测试结果expected *** to equal Stack Overflow。那么,百万美元的问题是,我如何获得赛普拉斯测试通过?

【问题讨论】:

【参考方案1】:

如果您通过 Vue 的脚本 test:e2e 进行测试,看起来测试目标是浏览器中的 Vue 应用程序,而不是电子应用程序。

当然,您可以根据这个问题How can I bind the html content in vuejs(以及您的 Electon 启动模块)在 Vue 应用程序中设置标题,并且您的 Electron 应用程序看起来仍然没问题。

Title.vue

<script>
  export default 
    name: 'vue-title',
    props: ['title'],
    watch: 
      title: 
        immediate: true,
        handler() 
          document.title = this.title;
        
      
    ,
    render () 
      return null;
    ,
  
</script>

App.vue

<template>
  <div id="app">
    <Title title="Stack Overflow"></Title>
    ...
  </div>
</template>

<script>
import Title from './components/Title.vue'

export default 
  name: 'App',
  components: 
    Title
  ,

</script>

现在测试通过了,但您仍然只是在测试 Vue 代码,而不是在 Electron 中运行。

请参阅Testing Electron.js applications using Cypress - alpha release 了解一些可能对您有所帮助的信息。

【讨论】:

以上是关于赛普拉斯测试因断言等于 DOM 标题而失败的主要内容,如果未能解决你的问题,请参考以下文章

赛普拉斯在开玩笑断言中导致类型错误

我应该如何断言在赛普拉斯中选中了该复选框?

如何使用赛普拉斯测试文件输入?

赛普拉斯:失败后是不是可以完成测试

赛普拉斯断言文本

赛普拉斯:测试元素是不是不存在