Интеграция сетки селена с каркасом автоматизации - PullRequest
0 голосов
/ 09 ноября 2018

Обратите внимание: просим людей не отмечать это как дубликаты и т. Д. Просим всех прочитать вопрос.

Я столкнулся с задачей, где мне нужно интегрировать сетку селена в мою инфраструктуру автоматизации: У меня есть следующие классы:

DriverFactory
DriverManager

Помимо этого, у меня есть папка драйверов, в которой я определил следующие вещи.

selenium standalone server jar
hub.json
node1.json
chromedriver.exe

Класс DriverManager:

public class DriverManager {
    public static ThreadLocal<WebDriver> driver  = new ThreadLocal<>();

    public static WebDriver getDriver() {
        return driver.get();
    }

    public static void setDriver(WebDriver drive) {
        driver.set(drive);
    }

    public static void removeDriver() {
        if (driver.get() != null) {
            driver.get().quit();
            driver.remove();
        }
    }
}

Здесь мне нужно заменить WebDriver на RemoteWebDriver, но когда я это делаю, я сталкиваюсь с ошибкой.

Класс DriverFactory:

public class DriverFactory {

    public static WebDriver createInstance(String browser) {
        if (browser.equals("chrome")) {

            ChromeDriver driver = new ChromeDriver(getChromeOptions());

            try {
                driver.manage().deleteAllCookies();
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                driver.manage().timeouts().pageLoadTimeout(100, TimeUnit.SECONDS);
            }
            catch (Exception e) {

            }
            return driver;
        }
        return null;
    }

    public static void killBrowserInstance(String browser) throws InterruptedException {
        try {


            if (browser.equals("chrome")) {

                if (OsUtils.isWindows()) {
                    Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe");
                }
                else {
                    Runtime.getRuntime().exec("killall \"chromedriver\"");
                    Runtime.getRuntime().exec("killall \"Google Chrome\"");
                }
            }

            Thread.sleep(1000);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static ChromeOptions getChromeOptions() {
        if (OsUtils.isWindows()) {
            System.setProperty("webdriver.chrome.driver", "Drivers/chromedriver.exe");
        }
        else {
            System.setProperty("webdriver.chrome.driver", "Drivers/chromedriver");
        }

        ChromeOptions options = new ChromeOptions();
        return options;
    }
}

Пожалуйста, игнорируйте оператор импорта. Пожалуйста, дайте мне знать, если вам потребуется дополнительная информация, даже если вы сможете использовать ее для удаленного решения, вы сможете получить доступ к экрану.

Образец теста:

 @Test
    public void LoginValid() throws Throwable {
        try {
            loginpage.login(prop.getProperty("username"), prop.getProperty("password"));
            // Logout
        } catch (Exception e) {
           Logz.step(LogStatus.FAIL, "Unable to Login");
            e.printStackTrace();
            throw e;
        }

    }

Когда я запускаю тестирование, внутренние вызовы происходят там, где создается инициализация и экземпляр драйвера.

 public synchronized void onTestStart(ITestResult iTestResult)
        DriverManager.setDriver(DriverFactory.createInstance(iTestResult.getTestContext().getCurrentXmlTest().getLocalParameters().get("browser")));
    }
...