Selenium JavascriptExecutor是什么
Selenium是一个广为人知的开源、基于Web的自动化工具,被许多人使用。但有时它在与某些元素交互时会遇到问题;也许意外弹出的窗口会阻止Web驱动程序执行操作并生成错误的结果。这就是JavascriptExecutor在这种情况下扮演关键角色的地方,使Web驱动程序能够成功执行所需的操作。它的复杂性和突发性并存,使得处理这种情况更加容易。
在Selenium中JavascriptExecutor是什么
使用名为JavascriptExecutor的接口,可以通过Selenium执行JavaScript,并在使用这种编程语言时与浏览器中的HTML进行交互。使用JavascriptExecutor对象是必不可少的,关键是创建长度和复杂度不同的句子结构,这对于构成一个有趣的文本至关重要。因此,JavaScript Executor提供了一种与浏览器内的HTML进行通信的方法,同时还便于程序员使用自己独特的JavaScript写作风格构建聪明灵活的表达式。
方法
以下是JavascriptExecutor在Selenium中提供的方法:
ExecuteScript(执行脚本)
在当前选择的窗口或框架中执行JavaScript从未如此简单!通过调用一个匿名函数,此方法使用户能够获得多种数据类型的收益,包括:
- Web元素
-
列表
-
字符串
-
长整型
-
布尔类型
-
ExecuteAsyncScript(异步执行脚本)
异步JavaScript执行是一种多线程的方法,用于在当前窗口或框架中执行单个JavaScript任务。它允许页面解析继续进行,优化性能并提供极大的灵活性。将代码分解为易于识别的组件,具有不同的复杂性和上下文,是实现此目标的关键。该方法涉及在某些区域创建简明的部分,同时在其他部分容纳更长和复杂的部分。使用此方法,异步JavaScript以高效和优化的方式运行。
了解如何使用JavascriptExecutor
- 第1步 - 导入包
import org.openqa.selenium.JavascriptExecutor;
- 步骤2 - 创建引用
javascriptExecutor js = (JavascriptExecutor) driver;
- 步骤3 − 调用JavascriptExecutor方法
js.executeScript(script, args);
实现
示例
// importing the package
Import org.openqa.selenium.JavascriptExecutor;
// creating a reference
JavascriptExecutor js = (JavascriptExecutor) driver;
// calling the method
js.executeScript(script, args);
Selenium中JavascriptExecutor的示例
示例1
刷新浏览器窗口。
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload()");
示例2
发送这段文本。
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementByID(‘element id ’).value = ‘xyz’;");
示例3
生成弹出警告窗口。
JavascriptExecutor js = (JavascriptExecutor)driver;
Js.executeScript("alert(‘hello world’);");
示例4
获取网页的内部文本。
avascriptExecutor js = (JavascriptExecutor)driver;
string sText = js.executeScript("return document.documentElement.innerText;").toString();
示例5
获取网页标题。
avascriptExecutor 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)");
使用javascriptExecutor选择一个元素
在这个示例中,我们使用selenium web driver和javascriptExecutor打开WaytoClass网站并点击一个元素。
说明
下面提到的脚本将启动Edge浏览器,打开WaytoClass网站,并使用javascriptExecutor点击特定元素。让我们来看看它的功能。
- 创建一个Edge驱动程序类,并在系统属性“webdriver.edge.driver”中提供youredgedriver.exe的路径。
-
使用driver.manage().window().maximize()最大化窗口
-
使用driver.get(“URL链接”)打开网址
-
使用finddby xpath方法获取Java元素”driver.findElement(By.xpath(“xpath地址”));”
-
通过使用javascriptExecutor js=(JavascriptExecutor)driver;为javascriptExecutor创建一个引用
-
调用javascriptExecutor方法并传递要点击的网页元素”js.executeScript(“arguments[0].click();”,webelement);”
示例
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 waytoclass {
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.waytoclass.com/");
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);
}
}
输出
Starting MSEdgeDriver 98.0.1108.56 (9a336a18ae89157b3c7ea0568a9cbced8ebc3f7) on port 55401
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping MSEdgeDriver safe. MSEdgeDriver was started successfully.
注意 − 在显示上述输出之后,它将自动打开网站并点击元素。
结论
通过使用JavascriptExecutor,可以实现在Web上增强自动化能力,使开发人员可以与页面元素进行交互,超出使用Selenium通常可以实现的范围。此外,通过将更高程度的灵活性和可定制性添加到等式中,可以在速度和效率方面大大改善Web自动化。尽管对于不熟悉JavaScript细微差别的经验不足的编码人员而言,这种语言很复杂,但掌握它可以使追求提升其网络形象的组织受益。