无法将WebDriver实例强制转换为JavascriptExecutor
我正在运行无法将WebDriver实例强制转换为JavascriptExecutor,java,selenium,casting,nullpointerexception,Java,Selenium,Casting,Nullpointerexception,我正在运行WebDriver(Selenium)&我正在尝试将WebDriver转换为JavascriptExecutor,如下所示: Object aa = ((JavascriptExecutor)driver).executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].nam
WebDriver
(Selenium
)&我正在尝试将WebDriver
转换为JavascriptExecutor
,如下所示:
Object aa = ((JavascriptExecutor)driver).executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;", this.element);
private final WebDriver driver;
public WebDriverAdapter(WebDriver driver)
{
this.driver = driver;
}
WebDriverAdapter driver;
public WebDriverDecorator(WebDriverAdapter driver, ...)
{
this.driver = driver;
....; // Random String parameter.
}
然后,我创建了另一个名为WebDriverDecorator
的类,它接受webdriverdapter
的实例。该类如下所示:
Object aa = ((JavascriptExecutor)driver).executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;", this.element);
private final WebDriver driver;
public WebDriverAdapter(WebDriver driver)
{
this.driver = driver;
}
WebDriverAdapter driver;
public WebDriverDecorator(WebDriverAdapter driver, ...)
{
this.driver = driver;
....; // Random String parameter.
}
当我尝试将任何驱动程序强制转换为JS executor时,我会得到一个类强制转换异常
另一方面,如果我同时拥有webdriverdapter
和WebDriverDecorator
extendRemoteWebDriver
,我不会得到类强制转换异常,但会得到NullPointerException
我该如何解决这个问题
谢谢
编辑:在Main
中,我的程序如下所示:
WebDriver FFDriver = new FirefoxDriver();
WebDriverAdapter driverAdapter = new WebDriverAdapter(FFDriver);
WebDriverDecorator driverDecorator = new WebDriverDecorator(driverAdapter, "....");
driverDecorator.navigate().to("http://google.com"); // Works correctly
String XPath = ("//*[@id='gbw']/div/div/div[1]/div[1]/a");
WebElement e1 = driver.findElementByXPath(.....);
System.out.println(e1.getText()); // Works correctly
Object aa = ((JavascriptExecutor)driverDecorator).executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;", e1); // Causes NullPointerException or Class cast exception depending on if I extend remote web driver or not..
WebDriver-FFDriver=新的FirefoxDriver();
WebDriverAdapter driverAdapter=新的WebDriverAdapter(FFDriver);
WebDriverDecorator driverDecorator=新的WebDriverDecorator(DriverDatapter,“…”);
driverDecorator.navigate()到(“http://google.com"); // 工作正常
字符串XPath=(“//*[@id='gbw']/div/div/div[1]/div[1]/a”);
WebElement e1=driver.findelementbypath(…);
System.out.println(e1.getText());//工作正常
对象aa=((JavascriptExecutor)driverDecorator).executeScript(“var items={};for(index=0;index
好的,我为此工作了一段时间,找到了解决方案。既然没有人回答这个问题,我就把我想出的答案贴出来
基本上,我需要做的就是将
implements JavascriptExecutor
添加到WebDriverCorator
和WebDriverDatapter
中,并添加未实现的方法(例如executeScript(字符串arg0,对象…arg1)
)。然后,我将在未实现的方法中将每个驱动程序强制转换为JS executor
,现在我可以直接在webdrivercorator
或webdriverdapter
的驱动程序上调用executeScript()
,而不强制转换任何内容。还可以给出webdrivercorator类的代码。添加了代码。