JavascriptExecutor是一個為方法提供一些默認代碼的介面executeScript。
RemoteWebDriver實作此介面并覆寫如下方法:
@Override
public Object executeScript(String script, Object... args) {...}
當我們創建 WebDriver 的實體時,我們使用 FireFoxDriver 或 ChromeDriver 之類的實體。這些方法將繼承父方法executeScript。
然而,每當我們想呼叫 executeScript 時,我們從不直接從驅動程式物件呼叫這個方法,如下所示:
driver.executeScript(...)
相反,我們總是先將其型別轉換為介面,然后再呼叫它。
這是一個示例代碼:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor executor =(JavascriptExecutor)driver;
executor.executeScript("window.location.href = 'https://google.com';");
為什么我們需要將驅動程式型別轉換為JavascriptExecutor?為什么我們不能直接打電話driver.executeScript呢?或者,我們可以將它型別轉換為 RemoteWebDriver 嗎?
uj5u.com熱心網友回復:
我們進行型別轉換是因為您的代碼通常使用 webdriver 型別,它是一個介面,不包含 executeScript 方法。
當您將驅動程式作為“webdriver”型別傳遞時,這些類假定它只有 WebDriver 介面的方法。您也可以將其轉換為 Chromedriver 型別,但相同的代碼不適用于 Geckodriver 或其他型別。
Creditsto pcalkins 對于這個答案。
因此,您將其轉換為介面 JavascriptExecutor 以保持代碼通用,以便它可以與 Geckodriver / Chromedriver 等一起使用。或者,您也可以將其轉換為 RemoteWebDriver,它仍然可以作業。但是當轉換為 JavascriptExecutor 時它更具可讀性。
這是一個完美地解釋了這一點的架構圖。這張圖片歸功于 qacult.com。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/475680.html
