Selenium中的 JavaScriptExecutor
Selenium是一种流行的基于 Web 的开源自动化工具。有时, Selenium webdriver 在与一些 web 元素交互时会遇到问题,例如,用户打开一个网站,出现意外的弹出窗口,这会阻止 webdriver 执行操作并产生不准确的结果。这是 JavascriptExecutor 开始使用的地方。
Selenium中的 JavaScriptExecutor 是什么?
JavaScriptExecutor 是一个接口,用于通过selenium webdriver 执行 JavaScriprt。 JavaScript 是一种在浏览器中与 HTML 交互的编程语言,要在Selenium中使用此函数,需要 JavascriptExecutor。
JavascriptExecutor 提供了两种方法:
- 执行脚本
- 执行异步脚本
1. 执行脚本
此方法在当前选定的窗口或框架中执行 javaScript。该脚本作为匿名函数运行,并且该脚本可以返回值。返回的数据类型有:
- 网元
- 列表
- 细绳
- 长
- 布尔值
2. 执行异步脚本
此方法用于在当前窗口或框架中执行异步 Javascript。执行的异步 Javascript 是单个线程,而页面的其余部分连续解析。这提高了性能。
开始使用 JavaScriptExecutor
1.导入包
Import org.openqa.selenium.JavascriptExecutor;
2.创建参考
JavascriptExecutor js = (JavascriptExecutor) driver;
3.调用JavascriptExecutor方法
js.executeScript(script, args);
Javascript
// importing the package
Import org.openqa.selenium.JavascriptExecutor;
// creating a reference
JavascriptExecutor js = (JavascriptExecutor) driver;
// calling the method
js.executeScript(script, args);
Java
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
public class geeksforgeeks {
public static void main(String args[])
{
System.setProperty(
"webdriver.edge.driver",
"C:\\Users\\ADMIN\\Documents\\Selenium\\msedgedriver.exe");
// Instantiate a Driver class.
WebDriver driver = new EdgeDriver();
// Maximize the browser
driver.manage().window().maximize();
// Launch Website
driver.get("https://www.geeksforgeeks.org/");
WebElement java = driver.findElement(
By.xpath("//*[@id=\"hslider\"]/li[6]/a"));
// Create a reference
JavascriptExecutor js = (JavascriptExecutor)driver;
// Call the JavascriptExecutor methods
js.executeScript("arguments[0].click();", java);
}
}
Selenium中的 JavascriptExecutor 示例
示例 1. Selenium中的 JavascriptExecutor 刷新浏览器窗口
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(“location.reload()”);
示例 2. Selenium中的 JavascriptExecutor 发送文本
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(“document.getElementByID(‘element id ’).value = ‘xyz’;”);
示例 3. 生成警报弹出窗口
JavascriptExecutor js = (JavascriptExecutor)driver;
Js.executeScript(“alert(‘hello world’);”);
示例 4. 获取网页的 InnerText
JavascriptExecutor js = (JavascriptExecutor)driver;
string sText = js.executeScript(“return document.documentElement.innerText;”).toString();
示例 5. 获取网页的标题
JavascriptExecutor js = (JavascriptExecutor)driver;
string sText = js.executeScript(“return document.title;”).toString();
示例 6. 滚动页面
JavascriptExecutor js = (JavascriptExecutor)driver;
//Vertical scroll – down by 150 pixels
js.executeScript(“window.scrollBy(0,150)”);
使用 JavaScripExecutor 单击元素
在示例中,我们使用selenium webdriver 和 javascriptexecutor 打开 geeksforgeeks 网站并单击一个元素。
Java
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
public class geeksforgeeks {
public static void main(String args[])
{
System.setProperty(
"webdriver.edge.driver",
"C:\\Users\\ADMIN\\Documents\\Selenium\\msedgedriver.exe");
// Instantiate a Driver class.
WebDriver driver = new EdgeDriver();
// Maximize the browser
driver.manage().window().maximize();
// Launch Website
driver.get("https://www.geeksforgeeks.org/");
WebElement java = driver.findElement(
By.xpath("//*[@id=\"hslider\"]/li[6]/a"));
// Create a reference
JavascriptExecutor js = (JavascriptExecutor)driver;
// Call the JavascriptExecutor methods
js.executeScript("arguments[0].click();", java);
}
}
代码说明:上述脚本用于打开 Edge 浏览器并导航到 geeksforgeeks 网站并使用 JavaScriptExecutor 单击元素。那么让我们看看它是如何工作的:
- 将系统属性“webdriver.edge.driver”设置为 youredgedrivrer.exe 文件的路径,并实例化 Edge 驱动程序类: System.setProperty(“webdriver.edge.driver”,"edgedriver location");
- 最大化窗口: driver.manage().window().maximize();
- 打开 URL: driver.get(“URL 链接”)
- 使用 finddby xpath 方法“driver.findElement(By.xpath(“xpath address”));获取Java的元素
- 为 JavaScriptExecutor 创建引用“JavascriptExecutor js = (JavascriptExecutor) driver;”
- 调用 JavascriptExecutor 方法并传递用于单击“js.executeScript(“arguments[0].click();”,webelement);”的webelement
输出: