我是Java和Selenium的初学者,我在工作时遇到JavascriptExecutor
。
想要知道:虽然远程webdriver和Firefox驱动程序实现了javascript执行程序,为什么我不能直接访问方法executeScript()
,为什么要进行类型攻击才能获得访问权?
以下是javascript执行程序的程序:
public class entertextwithoutsendkeys
{
WebDriver driver;
public entertextwithoutsendkeys()
{
driver = new FirefoxDriver();
}
@Test
public void entertextpgm()
{
driver.get("https://www.gmail.com/");
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("document.getElementById('Email').value='sh'");
}
}
答案 0 :(得分:3)
您的driver
变量(实际上是字段)声明为WebDriver
类型。
由于FirefoxDriver
实施WebDriver
,您可以毫无问题地将new FirefoxDriver()
分配给driver
。
现在您要执行一些JavaScript命令。为此,您必须使用executeScript()
界面的JavascriptExecutor
方法。
JavascriptExecutor
与WebDriver
接口无关(例如,这个接口不会扩展该接口),但FirefoxDriver
碰巧实现了这两种接口。
因此,即使您的driver
变量被视为WebDriver
(由于其声明),它实际上将值FirefoxDriver
保存为值 - 因此其值 1>}也是<{1}}(因为JavascriptExecutor
)。
但是,你必须找到一种方式来看待&#34; FirefoxDriver implements JavascriptExecutor
变量好像是driver
,因此您可以执行此界面的方法(如JavascriptExecutor
)。 这样做的方法,这&#34;&#34;,正在投射,就像你一样。
如果您从executeScript()
类型声明driver
,则不必进行任何演员表。亲自尝试一下。