Protractor的browser.executeScript对应Cypress哪个API?相关函数如何转换?
Protractor转Cypress executeScript等效实现方案
场景1:脚本点击按钮功能实现
等效代码如下:
// 初始化按钮选择器,对应原Protractor的element(by.id(button)) this.buttonSelector = `#${button}`; clickExactButton(): Cypress.Chainable<void> { // 写法1:直接操作原生DOM节点 return cy.get(this.buttonSelector).then($el => { $el[0].click(); }); // 写法2:链式调用更简洁,效果相同 // return cy.get(this.buttonSelector).invoke('get', 0).invoke('click'); }
说明:两种写法都直接调用原生DOM的click方法,完全绕过Cypress默认的元素可交互性校验,和原ProtractorexecuteScript实现的点击效果完全一致
场景2:会话存储注入数据功能实现
等效代码如下:
inject(jsonResponses: jsonResponse[]): Cypress.Chainable<void> { return cy.window().then(win => { let currentRes = win.sessionStorage.getItem('http_responses') || '[]'; currentRes = JSON.parse(currentRes); currentRes = jsonResponses.concat(currentRes); win.sessionStorage.setItem('http_responses', JSON.stringify(currentRes)); }); }
入参jsonResponses的结构和你原有定义完全兼容,不需要修改结构,示例结构如下:
export const ExampleData: jsonResponse[] = [ { id: '1', name: 'Bob', department: 'IT' }, { id: '2', name: 'Alice', department: 'Sales' }, { id: '3', name: 'David', department: 'InfoSec' } ]
说明:Cypress会自动处理异步执行逻辑,不需要手动封装Promise返回,链式调用会按顺序执行
内容的提问来源于stack exchange,提问作者Starchipper
相关产品推荐
相关产品推荐

