Здравствуйте.
У меня есть такой класс:
Я привязываю драйвер к потоку, и в потоке используется именно указаный драйвер.
Это работает с обычным selenium, но не работает с Selenide.
Когда я запускаю тесты в 2 потока (тестирую авторизацию) в одном браузере поля в форме авторизации заполняются по 2 раза, а во втором ничего не проиходит.
Подскажите как правильно привязать инстанс selenide к текущему потоку?
public class DriverContainer {
private static HashMap<Integer, WebDriver> drivers = new HashMap<Integer, WebDriver>();
public static WebDriver getCurrentDriver() {
Integer threadId = (int)Thread.currentThread().getId();
if(drivers.get(threadId) != null) {
return drivers.get(threadId);
} else {
initDriver();
return drivers.get(threadId);
}
}
private static void initDriver() {
Configuration.pageLoadStrategy = "eager";
Configuration.browserSize = "1920x1080";
Configuration.holdBrowserOpen = true;
Configuration.screenshots = false;
if(TestConfig.isHeadless()) {
Configuration.headless = true;
} else {
Configuration.headless = false;
}
switch (TestConfig.browser)
{
case "chrome":
Configuration.browser = Browsers.CHROME;
Selenide.open("http://google.com");
addDriver( WebDriverRunner.getSelenideDriver().getWebDriver());
break;
case "firefox":
Configuration.browser = Browsers.FIREFOX;
Selenide.open("http://google.com");
addDriver( WebDriverRunner.getSelenideDriver().getWebDriver());
break;
default:
Configuration.browser = Browsers.CHROME;
Selenide.open("http://google.com");
addDriver( WebDriverRunner.getSelenideDriver().getWebDriver());
}
}
public static void addDriver(WebDriver driver) {
Integer threadId = (int)Thread.currentThread().getId();
drivers.put(threadId, driver);
}
public static void removeDriver() {
Integer threadId = (int)Thread.currentThread().getId();
drivers.remove(threadId);
}
}
В page objects у меня вот такое
public class LoginPage extends BasePage {
public SelenideElement loginField = $("#login__username");
public SelenideElement passwordField = $("#login__password");
public SelenideElement signInButton = $("#login_enter");
public SelenideElement termsOfUseLabel = $("label[for=\"login_agree\"]");
public LoginPage(String pageUrl) {
super(pageUrl);
}
@Step("Login with email - {email} and password - {password}")
public void login(String email, String password) {
loginField.setValue(email);
passwordField.setValue(password);
termsOfUseLabel.click();
signInButton.click();
DriverHelper.waitForUrlContains("account/accounts");
}
}