Selenium中的JavascriptExecutor
Selenium是一个众所周知的开源网页自动化工具,被许多人使用。但是,在与某些元素交互时,它有时会遇到问题;例如,意外弹出的窗口可能会妨碍WebDriver执行操作并产生错误的结果。这就是JavascriptExecutor在这种情况中证明其关键作用的地方,它使WebDriver能够成功执行所需的操作。它的复杂性和突发性并存,使这种情况更容易处理。
Selenium中的JavascriptExecutor是什么?
使用名为JavascriptExecutor的接口,可以通过Selenium执行JavaScript,并与浏览器中的HTML进行交互。使用这种编程语言时,必须使用JavascriptExecutor对象,创建长度和复杂度不同的句子结构对于撰写引人入胜的文本至关重要。因此,JavaScript Executor提供了与网页浏览器内部HTML通信的方法,并帮助程序员使用他们自己独特的JavaScript编写风格来创建巧妙的表达。
方法
以下是Selenium中JavascriptExecutor提供的方法:
ExecuteScript
在当前选择的窗口或框架中执行JavaScript从未如此简单!通过调用匿名函数,此方法使用户能够获得多种数据类型的回报,包括:
网页元素
列表
字符串
长整型
布尔型
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 webdriver和javascriptExecutor打开WaytoClass网站并点击一个元素。
解释
以下脚本将启动Edge浏览器,带您进入WaytoClass网站,并使用javascriptExecutor点击特定元素。让我们看看它是如何工作的。
创建一个Edge驱动程序类,并在系统属性“webdriver.edge.driver”中提供edgedriver.exe的路径。
使用driver.manage().window().maximize()最大化窗口。
使用driver.get("URL链接")打开URL。
使用findby xpath方法“driver.findElement(By.xpath("xpath地址"))”获取Java元素。
使用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复杂性的经验不足的程序员来说比较复杂,但掌握这种语言可以使那些努力提升其互联网形象的组织受益。