将EventFiringWebDriver与RemoteWQebDriver一起使用

问题描述 投票:0回答:2

我想将EventFiringWebDriver与RemoteWebDriver一起使用,因为我们正在使用selenium网格,使用WebDriver我的代码工作正常但是当我尝试将EventFiringWebDriver转换为RemoteWebDriver时,我在运行时遇到异常。

java.lang.ClassCastException: org.openqa.selenium.support.events.EventFiringWebDriver cannot be cast to org.openqa.selenium.remote.RemoteWebDriver
    at com.sixt.test.eventfiringwebdriver.DriverFactory.getDriverInstance(DriverFactory.java:52)
    at com.sixt.test.eventfiringwebdriver.DriverFactoryTest.test1(DriverFactoryTest.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

请帮忙。

java selenium ui-automation
2个回答
0
投票

EventFiringWebDriver不是RemoteWebDriver的子类,所以你不能直接施放它。这是一个非常罕见的情况,您需要直接使用RemoteWebDriver,但如果您需要事件触发包装器使用的驱动程序实例,您可以执行以下操作:

// Note: Assume eventDriver is a valid EventFiringWebDriver instance
// Further note: Yes, it's possible to consolidate the below into fewer lines,
// but each step is shown here for clarity.
WrapsDriver wrapperAccess = (WrapsDriver)eventDriver;
WebDriver driver = wrapperAccess.getWrappedDriver();

// If you really, really need a RemoteWebDriver instance here, you can do this
RemoteWebDriver remoteDriver = (RemoteWebDriver)driver;

0
投票

有时我们需要具体实施,例如:

  • 要有sessionID:((RemoteWebDriver) webdriver).getSessionId()
  • 上传文件:((RemoteWebDriver) webdriver).setFileDetector()

0
投票

试试这个

 ((RemoteWebDriver) ((EventFiringWebDriver) this.browserContext.getDriver()).getWrappedDriver());
© www.soinside.com 2019 - 2024. All rights reserved.