提问人:Umran Erdogan 提问时间:9/20/2023 最后编辑:Umran Erdogan 更新时间:9/20/2023 访问量:27
为什么我收到“会话 ID 为空。在 SeleniumWebdriver 中调用 quit()?“ 异常后使用 WebDriver?
Why I'm getting "Session ID is null. Using WebDriver after calling quit()?" exception in SeleniumWebdriver?
问:
我收到“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 中不起作用。
答: 暂无答案
评论