Cypress简易入门教程

1 Windows下安装

1.1方法一

1)安装node.js(https://nodejs.org/en/download/),根据版本选择32位或64位。

2)确认ndejs和npm是否安装上:

C:\Users\xiang>node -v
v12.18.0
C:\Users\xiang>npm -v
6.14.

3)生成package.json(假设准备安装在c:\Cypress>)

C:\Users\xiang>cd c:\Cypress
C:\Cypress>npm init

4)安装Cypress

C:\Cypress>npm install cypress --save-dev

1.2方法二

1)安装yarn (https://yarnpkg.com/en/docs/install#windows-stable)

2)确认yarn是否安装上

C:\Users\xiang>yarn -v
1.22.4

3)安装Cypress

C:\Users\xiang>cd c:\Cypress
C:\Cypress>yarn add cypress --dev
  1. 运行

2.1方法一

C:\Cypress\node_modules\.bin>cypress open

2.2方法二

C:\Cypress>yarn run cypress open

2.3 方法三(我经常用的方法)

配置C:\Cypress\package.json

{
  "license": "ISC",
  "scripts": {
    "cypress:open": "cypress open",
    "cypress:run": "cypress run"
  },
  "devDependencies": {
    "cypress": "^4.8.0"
  }
}

打开运行控制器

C:\Cypress>yarn run cypress open

运行默认路径下的所有测试代码

C:\Cypress>yarn run cypress run

默认路径为C:\Cypress\cypress\integration,可以通过

{
  …
"integrationFolder": "cypress/integration/demo",
…
}

改变默认路径,上述代码中默认路径改为

C:\Cypress\cypress\integration\demo

3测试框架

  • before():相当于unittest中的def setUp(cls)方法或者Junit的@Before方法标签;
  • after():相当于unittest中的 def teardown(cls) 方法或者Junit的 @Before方法标签;
  • beforeEach() : 相当于unittest中的def setUpClass(cls) 方法或者Junit的@BeforeClass方法标签;
  • afterEach() : 相当于unittest中的def tearDownClass(cls) 方法或者Junit的@AfterClass方法标签。
    4 GUI测试代码案例

4.1 第一个测试代码

测试电子商务系统登录程序

describe('login',function(){
  const username = 'cindy'
  const password = '123456'
  context('测试电子商务网站',function(){
    it('登录成功,调到商品列表页面',function(){
      cy.visit('http://127.0.0.1:8000')
      cy.get('input[name=username]').type(username)
      cy.get('input[name=password]').type(password)
      cy.get('form').submit()
      //断言
      cy.url().should('include','/goods_view')
      cy.get('title').should('contain','电子商务系统')
     })  
    })
})

4.2元素查找 - get

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

根据元素 id 查找

cy.get('#kw')

根据元素名称查找

cy.get('input[name="wd"]')

根据元素的类名查找

cy.get('.s_ipt')

根据CSS selector查找、

cy.get('input[maxlength ="100"]')

4.3元素查找 – contains

根据元素文本查找

cy.contains('value')  

根据元素属性及其文本查找

cy.get('div[name="ele-name"]').contains('value')

使用正则匹配元素文本以查找

cy.get('.class-name').contains(/[0-9]*/)

4.4 操作

type(String)、输入,比如

cy.get('#kw'). type('Testing')

click()、点击,比如

cy.get('.btn'). click ()

clear()、清空input或textarea的内容,比如

cy.get('.ant-input').clear()

submit()、提交表单,比如

cy.get('.ant-form').submit()

dblclick()、元素双击,比如

cy.get('.ant-btn').dblclick()

rightclick()、元素右击,比如

cy.get('.ant-btn').rightclick()

select(String)、对元素选择,比如

cy.get('.ant-select').select('apples')

check()、勾选checkbox,比如

cy.get('.ant-checkbox').check()

Uncheck、反选 checkbox,比如

cy.get('.ant-checkbox').uncheck()

scrollIntoView()、如果某个元素不在当前可视范围,可以滑动至可视范围,比如

cy.get('#id').scrollIntoView()

scrollTo(String)、指定位置滑动,比如

cy.scrollTo('bottom')、cy.get('#id').scrollTo(250, 250)

4.5 鼠标操作

鼠标悬停事件:

cy.get('button').trigger('mouseover')

鼠标按下:

cy.get('button').trigger('mousedown')

鼠标抬起:

cy.get('button').trigger('mouseleave')
cy.get('button').trigger('mouseup')

鼠标长按事件:

cy.get('button').trigger('mousedown')
cy.wait(1000)
cy.get('button').trigger('mouseleave')

鼠标拖拽事件

cy.get('[data-cy=draggable]')
  .trigger('mousedown', { which: 1, pageX: 600, pageY: 100 })
  .trigger('mousemove', { which: 1, pageX: 600, pageY: 600 })
  .trigger('mouseup')
describe('baidu',function(){
  context('测试百度网站',function(){
    it('查询成功',function(){
      cy.visit('https://www.baidu.com')
      cy.get('input[name=wd]').type("软件测试")
      cy.get('#su').click()
      cy.get('title').should('contain','百度搜索')
     }) 
    it('进入高级查询成功',function(){
      cy.get('a[name=tj_settingicon]').trigger('mouseover')
      cy.get('.bdpfmenu').should('exist')
     })  
  })
})

4.6 断言

针对长度的断言

cy.get('li.selected').should('have.length',3)

正对类的断言

cy.get('from').fijd('input').should('not.have.class','disabled')

针对值断言

cy.get('textarea').should('have.value','3testing')

针对文本内容的断言

cy.get('a').parent('span.help').should('contain','click me')

针对元素可见与否的断言

cy.get('button').should('be.visible')

针对元素存在与否的断言

cy.get('#loading').should('not.exist')

针对元素状态的State的断言

cy.get(':radio').should('be.checked')

针对CSS的断言

cy.get('.completed').should('have.css','text-decoration','line-through')

4.7 跨iframe操作

describe('login',function(){
  context('测试啄木鸟软件咨询网',function(){
    it('点击我的介绍成功',function(){
      cy.visit('http://www.3testing.com')
      cy.get('#head',{timeout: 2000})
            .then($iframe => {
                cy.wrap($iframe.contents().find("#introduce"));
            })
            .then($btn => {
                cy.wrap($btn).click()
            });
      //断言
      cy.url().should('include','introduce.html')
      cy.get('title').should('contain','啄木鸟软件测试咨询网-顾翔介绍')
     })  
  })
})

4.8 多窗口操作

Cypress不支持多窗口操作。

5 API测试

5.1 普通API测试

describe('login',function(){
  const username = 'cindy'
  const password = '123456'
  const producturl="http://127.0.0.1:8000/login_action/"
  cy.request({
        method: 'POST',
        url: producturl,
        body: {
          username: username
          password: password
}
      })
  })

5.2 CSRF token API测试

describe('login',function(){
  const username = 'cindy'
  const password = '123456'
  const producturl="http://127.0.0.1:8000/login_action/"
    Cypress.Commands.add('loginByCSRF', (csrfToken) => {
    cy.request({
        method: 'POST',
        url: producturl,
        failOnStatusCode: false, // 不要失败,这样我们才能断言
        form: true, // 我们正在提交一份常规表格
        body: {
          username,
          password,
          csrfmiddlewaretoken: csrfToken // 将此作为主体的一部分插入
        }
      })
  })
  // csrf在返回的html中,我测试的Django产品的CSRF token用这种方法
  it('策略#1:从HTML解析令牌', function(){
    // 如果我们不能改变我们的服务器代码以使解析CSRF令牌变得更容易,
    // 我们可以简单地使用cy.request来获取登录页面,然后解析HTML内容
    // 以找到嵌入在页面中的CSRF令牌
    cy.request(producturl)
      .its('body')
      .then((body) => {
        //我们可以用Cypress.$解析字符串主体,从而使我们能够轻松地查询到它
    cy.log(body)
        const $html = Cypress.$(body)
        const csrf  = $html.find("input[name=csrfmiddlewaretoken]").val()
    cy.loginByCSRF(csrf)
          .then((resp) => {
            expect(resp.status).to.eq(200)
      expect(resp.body).to.contain("Company 2017")
          })
      })
    })
  })
/*


  // 如果csrf在响应头中
  it('策略#2:从响应头解析令牌', function(){
    // 如果我们将csrf令牌嵌入到响应头中,那么我们就可以更容易地提取它,
    // 而不必深究最终的HTML
    cy.request(producturl)
      .its('headers')
      .then((headers) => {
        const csrf = headers['csrftoken']
    cy.log(csrf)
        cy.loginByCSRF(csrf)
          .then((resp) => {
            expect(resp.status).to.eq(200)
            expect(resp.body).to.contain("Company 2017")
          })
      })
    })
   }) */

原文地址:https://blog.csdn.net/yinghuochong124/article/details/114582431

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本文技术难度★★★,如果前编内容顺利执行,请继续。如果Selenium尚无法灵活运用的读者,本文可能难度较大。“理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打拼职场的老司机。不记得没关系,只需要知道:有这么一位IT老司机,穿上西装,带大家打拼职场!
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html Cypress简介基于JavaScript的前端测试工具,可以对浏览器中运行的任何内容进行快速、简单、可靠的测试Cypress是自集成的,提供了一套完整的端到端测试,无须借助其他外部
web技术已经进化了,web的测试技术最终还是跟上了脚步,新一代的web自动化技术出现了?Cypress可以对在浏览器中运行的任何东西进行快速、简单和可靠的测试。“Thewebhasevolved.Finally,testinghastoo.Fast,easyandreliabletestingforanythingthatrunsinabrowser.”
不很久不很久以前据说某家公司有两位前端,天天撸bug,为啥嘞?只怪测试MM倾人国,轻语哥哥有bug。✧(๑•̀ㅂ•́)و✧可是最近两位有点犯愁Σ(っ°Д°;)っ。测试MM有几次提了紧急bug,都在旁边鼓励他们改bug了,可是线上bug重现排查比较麻烦,而且改了后还发现没改好,惹得测试MM潸然泪
我刚开始学习JavaScript并且一直在使用赛普拉斯来自动化一些回归测试.我当前编写的测试旨在验证链接的文本和页眉和页脚中的href.我遇到的问题是这些测试需要在各种环境中运行,我似乎无法访问cypress.json中设置的baseUrl属性,以便在我的断言中设置域.在后面的脚本中,它是行cy.ge
cypress在pycharm中编写首先打开pycharm,打开cypress项目 打开此文件  打开后需要在pycharm中设置js语言  设置成功后在intergration文件夹下,创建用例文件夹demo1,创建test.js文件编写代码:  此段代码为进入百度页面,输入Jaredhan,点击搜索后等待1000ms 1、des
前言面试时间经常被问到:你的测试数据放哪?有没有做到测试数据和代码的分类?Cypress使用cypress/fixture目录存放json文件数据,cy.fixture()加载测试数据。官方文档参考https://docs.cypress.io/api/commands/fixture.html#Syntaxfixture使用在cypress/fixture目录写个
示例代码如下:比如现在要点击"loginFrame"中的"J_Quick2Static"按钮cy.get('#loginFrame',{timeout:2000}).then($iframe=>{cy.wrap($iframe.contents().find("#J_Quick2Static"));})
前言Cypress提供了hooks函数,方便我们在组织测试用例的时候,设置用例的前置操作和后置清理。类似于python的unittest里面的setUp和setUpclass功能HooksCypress提供了hooks函数。这些有助于设置要在一组测试之前或每个测试之前运行的条件。它们也有助于在一组测试
前言cypress上默认访问一个跨域的网页会出现异常:CypressdetectedacrossoriginerrorhappenedonpageloadAcrossoriginerrorhappenswhenyourapplicationnavigatestoanewURLwhichdoesnotmatchtheoriginpolicyabove.之前使用selenium的时候,不用关
前言先定位父元素,通过父元素定位子元素.children()通过父元素,定位子元素<olclass="traversal-breadcrumbbreadcrumb"><li><ahref="#">Home</a></li><li><ahref="#">Library</a></l
LoadDatafromTestFixturesinCypressWhencreatingintegrationtestswithCypress,we’lloftenwanttostubnetworkrequeststhatrespondwithlargedatasets.Allofthismockdatacanleadtotestcodethatishardtoread.Inthislesson,we’llseeh
我在应用程序中有一个端点.我们在每个请求中使用params中的不同操作来达到相同的api.网址/application/api样本请求有效负载1:{"action":"CARD_TRANSACTION_HISTORY","data":{"date_from":"2018-12-01","date_to":"2018-12-31","
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 前言啥是可操作类型?就是可以和DOM元素交互的命令,比如:点击,双击.....等等等这些命令模拟用户和应用程序交互,Cypress会触发浏览器事件,进而触发应用程序绑定的时间这一
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 前言重试(Retry-ability)是Cypress的核心概念之一,有助于我们写出更加健壮的测试 命令和断言Cypress测试中经常被调用的两种类型,仍以前面说到的 testLogin.js 为栗
前言做web自动化的时候,我们希望用例失败了能截图,这是之前用selenium写ui自动化用例的时候经常遇到的问题。cypress可以说是业界良心了,不仅帮我们失败的时候自动截图保存下来,还把每个用例都录制成了mp4的小视频,方便追踪问题的时候回复视频screenshots失败截图当我们用
一:Cypress简介随便着Web应用项目的不断发展,测试也要不断发展,Cypress是为现代网络打造的,基于JavaScript语言的一种前端自动化测试工具,测试也是如此,对浏览器中运行的所有内容进行快速,轻松和可靠的测试。Cypress是自集成的,它提供了一套完整的端到端的测试体验,正如官网上所说:安装C
1、fixture路径下创建.json文件夹,内容如下{"loginName":"huahua","password":"huahua"}  2、加载loginEmgs文件(后缀可省略),使用then读取数据before(()=>{cy.fixtures('loginEmgs').then((data)=>{this.data=data;})}) 3、使用数据cy.
命令行安装Cypress:npminstallcypress--save-devnpminit编辑package.json,添加如下的json语句:"scripts":{"open":"cypressopen"},然后执行命令npmrunopen,即可打开Cypresstestrunner:默认看到的examples文件夹里有很多现成的例子:我们在int
如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 重试的介绍学习前的三问什么是重试测试为什么重试很重要如何使用重试 为什么要重试使用Cypress进行自动化测试时,仍然会存在一些难以验证的行为,并使得测试变得