Обратите внимание: просим людей не отмечать это как дубликаты и т. Д. Просим всех прочитать вопрос.
Я столкнулся с задачей, где мне нужно интегрировать сетку селена в мою инфраструктуру автоматизации:
У меня есть следующие классы:
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")));
}