Selenium - org.openqa.selenium.remote.SessionNotFoundException: идентификатор сессии является нулевым
Я могу запустить один тест, но при попытке выполнить второй выдается это исключение.
Проблема заключается в том, что драйвер, который я прохожу по всем страницам, является статическим, и когда я закрываю браузер между тестами, он устанавливается на ноль и больше не работает, только для первого сценария.
Я сомневаюсь, как изменить код, чтобы он запускался для всех тестов, закрывая браузер между ними.
package com.***.pageobjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Browser {
private static WebDriver driver = new ChromeDriver();
public static WebDriver driver() {
return driver;
}
public static void open(String url) {
driver.get(url);
}
public static void close() {
driver.quit();
System.out.println(driver.toString());
}
}
public class LoginPage extends LoadableComponent<LoginPage> {
private WebDriver driver;
static String url = "***";
private static String title = "***";
public LoginPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
@Override
protected void load() {
Browser.open(url);
driver.manage().window().maximize();
}
@Override
protected void isLoaded() throws Error {
assertTrue("Login page not loaded",
driver.getTitle().equals(title));
}
public MainPage MainPage() {
MainPage mainpage = new MainPage(driver);
return mainpage;
}
}
public class MainPage {
private WebDriver driver;
@FindBy(id = "user-userName")
private WebElement userName;
@FindBy(id = "password")
private WebElement pwd;
@FindBy(id = "btnLogin")
private WebElement buttonlogin;
public MainPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void login(String user, String password)
{
userName.sendKeys(user);
pwd.sendKeys(password);
buttonlogin.click();
}
}
public class areaPersonalSuite {
@cucumber.api.java.Before
public void beforeScenario() {
System.setProperty("webdriver.chrome.driver","./src/test/resources/drivers/chromedriver");
}
@Given("Soy cliente")
public void soyCliente() {
}
@When("^Accedo a mi Area Personal con usuario (.*) y password (.*)$")
public void accedoAreaPersonal(String user, String password){
// Create an instance of Home page
LoginPage loginpg = new LoginPage(Browser.driver());
// Navigate to the Home page
loginpg.get();
loginpg.MainPage().login(user,password);
}
@Then ("el sistema muestra mi dirección, teléfono y email correctamente")
public void direccionTelefonoEmail(){
LoginPage telefono = new LoginPage(Browser.driver());
telefono.MainPage().addressCheck();
@cucumber.api.java.After
public void afterScenario() {
Browser.close();
1 ответ
Если я правильно понимаю, ваша проблема больше связана с управлением драйверами. Я бы предложил использовать проверенную существующую среду, такую как QAF, которая занимается управлением драйверами.
Это позволит вам настроить драйвер через свойства или из xml-файла конфигурации запуска и создаст экземпляр драйвера для теста в соответствии с конфигурацией запуска. Вы можете запустить один и тот же тест в другом браузере без изменения кода.
public class LoginPage extends WebDriverTestPage{
@FindBy("locator.in.repository")
private WebElement ele;
public WebElement getEle(){
return ele;
}
}
Вы также можете использовать BDD из QAF или gherkin с QAF. Вы можете проверить пример проекта или вот пример QAF огурчик