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複雜性的經驗不足的程式設計師來說比較複雜,但掌握這種語言可以使那些努力提升其網際網路形象的組織受益。