如何在Cypress中执行Javascript命令

490 阅读2分钟

如何在Cypress中执行Javascript命令

在Cypress中执行Javascript命令 JavascriptExecutor

如果你有Selenium背景,比如你使用过Selenium Java、Protractor等工具,那么你应该使用过 **executeScript** 命令来执行javascript命令。通常情况下,当你在通过内置的方法来模拟任何动作时,或者在它不工作的情况下,我们会使用它。此外,还有很多用途,比如说如果你想在浏览器上执行自定义的javascript方法,它将会很有用。

考虑到Cypress,这些种类的javascript命令在Cypress中不太需要。原因是它通常直接在浏览器中工作。不过,如果你有需要,Cypress还是提供了一种执行JavaScript的方法。

这篇文章解释了

  • 如何在Cypress中执行Javascript Click?
  • 如何在Cypress中使用Javascript执行器
  • 在Cypress中运行Javascript
  • 如何在本地浏览器窗口中执行命令?

在本文例子的帮助下,你可以在Cypress中修改和执行Javascript动作,如MovetoElement、Scroll、MouseMove、ScrollIntoView、Hover、MouseHover任何点击动作、双击、聚焦等。

让我们考虑一个例子。在Selenium中,你写下面的代码来执行Javascript点击动作。

Java

//Selenium Code to Execute Javscript for Click Actions
WebElement element = driver.findElement(By.id("pHiOh"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

如何在Cypress中执行Javascript点击动作?

考虑到上面的例子,我们可以在Cypress中进行类似的操作

方法1:通过获取本地HTML DOM元素在Cypress中执行Javascript

TypeScript

//Method1: Cypress way of executing javascript click
cy.get("pHiOh").then(($el)=>{
 $el.get(0).click(); //This is the navite HTML DOM element
})

通过上面的例子,Cypress给你提供了对本地HTML DOM元素的控制,你可以对其执行任何动作,这与Javascript的点击事件非常相似。

考虑到上述代码$el.get(0).click(),$el持有本地HTML DOM元素,你可以对其执行任何操作,如上例所示。

方法2:在Cypress中使用窗口对象执行Javascript

这种方法是Cypress让你控制整个窗口,你可以对其执行任何动作,让我们看看这个例子

Cypress cy.window() 命令可以直接访问浏览器窗口,一旦你有了这个对象,你就可以直接对浏览器窗口执行任何操作。

TypeScript

//Method 2: Cypress way of executing javascript click using window object
cy.window().then((win) => {
 win.eval('document.getElementById("login_submit").click()');
});

在上面的例子中,我们使用window.eval()函数来执行javascript。

如果你想在cypress中添加或删除任何HTML元素,你也可以这样做。

如何在Cypress中动态地改变HTML元素的文本?

TypeScript

cy.visit('https://www.google.com/');
cy.window().then((win) => { 
   win.document.getElementsByName('btnK')[1].value = "Ganesh" 
});

使用Cypress中的windows对象,你几乎可以做任何本地浏览器的操作。

如何在Cypress中动态添加一个HTML元素?

TypeScript

cy.visit('https://www.google.com/');
  var el = window.document.createElement('button');
  el.innerText = "GANESH APPENDED"
  cy.get('#SIvCob').then(($el) => {
   $el.get(0).appendChild(el);
  })

简而言之,我们可以在Cypress中执行所有的javascript操作,相当于在Selenium Java/C#或protractor中执行Javascript。

参考链接:

  1. Javascript命令
  2. 本地Dom元素