代码之家  ›  专栏  ›  技术社区  ›  arena

Selenium Grid(RemoteWebDriver)与Cucumber jvm SharedDriver的使用

  •  0
  • arena  · 技术社区  · 7 年前

    我用SharedDriver实现了cucumber jvm picocontainer,并且在本地运行良好。我想使用配置良好的Selenium网格,但我不知道应该如何修改 Shareddriver 类以使用 RemoteWebDriver 而不是 WebDriver 并连接到Selenium网格。

    new RemoteWebDriver(new("http://..../wd/hub"), capability); 因为我需要扔 MalFormedException REAL_DRIVER 是静态字段。

    有什么想法吗?谢谢

    public class SharedDriver extends EventFiringWebDriver {
    
        private static final WebDriver REAL_DRIVER = WebDriverFactory.internetExplorerWebDriver();
        private static final Thread CLOSE_THREAD = new Thread() {
            @Override
            public void run() {
                REAL_DRIVER.close();
            }
        };
    
        static {
            Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
        }
    
    
        public SharedDriver() {
            super(REAL_DRIVER);
        }
    
        @Override
        public void close() {
            if(Thread.currentThread() != CLOSE_THREAD) {
                throw new UnsupportedOperationException(
                        "WebDriver should not close!"
                );
            }
            super.close();
        }
    
        @Before
        public void deleteAllCookies() {
            manage().deleteAllCookies();
        }
    
        @After
        public void embedScreenshot(Scenario scenario) {
            ...
        }
    
    }
    

    WebDriverFactory:

    class WebDriverFactory {
        static {
            System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
        }
    
        static WebDriver internetExplorerWebDriver() {
            DesiredCapabilities returnCapabilities = DesiredCapabilities.internetExplorer();
                System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
            returnCapabilities.setCapability("requireWindowFocus", true);
            returnCapabilities.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false);
            returnCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
            returnCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
            returnCapabilities.setCapability("ignoreZoomSetting", true);
            return new InternetExplorerDriver(returnCapabilities);
    
        }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Eugene S    7 年前

    您可以将return语句包装成 try..catch 阻止并返回 null 如果引发异常。

    class WebDriverFactory {
    static {
        System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
    }
    
    static WebDriver internetExplorerWebDriver() {
        DesiredCapabilities returnCapabilities = DesiredCapabilities.internetExplorer();
            System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
        returnCapabilities.setCapability("requireWindowFocus", true);
        returnCapabilities.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false);
        returnCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
        returnCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        returnCapabilities.setCapability("ignoreZoomSetting", true);
    
        try {
            return new RemoteWebDriver(new URL("http://www.google.com"), returnCapabilities);
        } catch (MalformedURLException e) {
            return null;
        }
    
    }
    

    然后,检查 REAL_DRIVER 值不是 无效的 .