为什么我收到“会话 ID 为空。在 SeleniumWebdriver 中调用 quit()?“ 异常后使用 WebDriver?

Why I'm getting "Session ID is null. Using WebDriver after calling quit()?" exception in SeleniumWebdriver?

提问人:Umran Erdogan 提问时间:9/20/2023 最后编辑:Umran Erdogan 更新时间:9/20/2023 访问量:27

问:

我收到“org.openqa.selenium.NoSuchSessionException:会话 ID 为空。在运行测试用例时调用 quit()?“ 异常后使用 WebDriver。

我的测试课是这样的;

import org.testng.annotations.Test;

public class LoginTests extends TestBase{

    LoginAndSignUpPage loginAndSignUpPage=new LoginAndSignUpPage();

    @Test (priority = 1)
    public void loginWithValidCredentials(){

        loginAndSignUpPage.navigateToModule("Log in");
        loginAndSignUpPage.login_userName.sendKeys(ConfigurationReader.get("username"));
        loginAndSignUpPage.login_password.sendKeys(ConfigurationReader.get("password"));
        loginAndSignUpPage.login_button.click();
        BrowserUtils.waitFor(3);

        String expectedUser= "Welcome " + ConfigurationReader.get("username");
        Assert.assertEquals(expectedUser, loginAndSignUpPage.nameOfUser.getText());
       
    }

  
    @Test (priority = 2)
    public void loginWithInvalidPassword(){

       loginAndSignUpPage.navigateToModule("Log in");
       loginAndSignUpPage.login_userName.sendKeys(ConfigurationReader.get("username"));
       loginAndSignUpPage.login_password.sendKeys("wrongpassword)");
       loginAndSignUpPage.login_button.click();

        String actual =alert.getText();
        String expected ="Wrong password.";

        BrowserUtils.waitFor(3);
        Assert.assertEquals(expected, actual);*/

    }

    @Test (priority = 3)
    public void loginWithInvalidUsername(){

        loginAndSignUpPage.navigateToModule("Log in");
        loginAndSignUpPage.login_userName.sendKeys("wrongUsername");
        loginAndSignUpPage.login_password.sendKeys(ConfigurationReader.get("password"));

        loginAndSignUpPage.login_button.click();
        Alert alert= Driver.get().switchTo().alert();;
        String actual =alert.getText();
        String expected ="User does not exist.";
        BrowserUtils.waitFor(3);
       Assert.assertEquals(expected, actual);

    }
}

我的 Driver 类是这样的;

public class Driver {

    private Driver(){}

    private static InheritableThreadLocal<WebDriver> driverPool = new InheritableThreadLocal<>();

    public static WebDriver get(){

        if (driverPool.get() == null){

          
            String browser = System.getProperty("browser") != null ? browser = System.getProperty("browser") : ConfigurationReader.get("browser");

            switch (browser){
                case "chrome":
                    WebDriverManager.chromedriver().setup();
                    ChromeOptions options = new ChromeOptions();
                    options.addArguments("--remote-allow-origins=*");
                    driverPool.set(new ChromeDriver(options));
                    driverPool.get().manage().window().maximize();
                    driverPool.get().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                    break;
}
....

我的 TestBase 是这样的;

public class TestBase {

    protected WebDriver driver;
    protected Actions actions;
    protected WebDriverWait wait;

    @BeforeMethod
    public void setUp(){
        driver= Driver.get();
        actions= new Actions(driver);
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        driver.get(ConfigurationReader.get("url"));
    }
    @AfterMethod
    public void tearDown(ITestResult result) throws IOException, InterruptedException {
       
            Thread.sleep(2000);
            Driver.closeDriver();
        }

    }

还有我的POM课;

public class LoginAndSignUpPage extends BasePage{
    public LoginAndSignUpPage() { PageFactory.initElements(Driver.get(), this); }

    @FindBy(id = "sign-username")
    public WebElement signUp_userName;
...

和 BasePage

public abstract class BasePage {


    public BasePage() { PageFactory.initElements(Driver.get(), this); }

...

我执行我的测试类,它扩展了测试库。第一个测试被执行,但其他测试没有。我尝试使用 @AfterTestSuite、@AfterClass 等方法,它们在 TestBase 中不起作用。

java selenium-webdriver 测试

评论


答: 暂无答案