【问题标题】:closing browser after test pass测试通过后关闭浏览器
【发布时间】:2016-01-12 11:04:40
【问题描述】:
public void tearDown()
{       
      driver.quit();
}

public void signInFacebook(String link) throws InterruptedException {
    log.header("USER SIGN IN VIA FACEBOOK");
    log.step("Click the Sign In Link");
    clickLink(link);
    Thread.sleep(3000);
    log.log("click success.......");
    log.step("Click 'Sign in with Facebook' Link ");

    // Store the current window handle
    String parentHandle = driver.getWindowHandle();

    // Perform the click operation that opens new window
    driver.findElement(By.cssSelector(CONSTANTs.FB_SIGN_IN)).click();
    Thread.sleep(5000);

    // Switch to new window opened
    log.divider("Facebook Login Screen.....Enter Details Below");
    for (String childHandle : driver.getWindowHandles()) {
        driver.switchTo().window(childHandle);

        if (!childHandle.equals(parentHandle)) {
            log.step("Enter Email address");
            driver.findElement(By.cssSelector(CONSTANTs.FB_EMAIL_TXTBOX))
                    .sendKeys(CONSTANTs.EMAIL_ADDRESS);
            Thread.sleep(2000);
            log.step("Enter password");
            driver.findElement(By.cssSelector(CONSTANTs.FB_PASSWORD_TXTBOX))
                    .sendKeys(CONSTANTs.FB_PASSWORD);
            Thread.sleep(2000);
            log.step("Click Log_In button");
            driver.findElement(By.cssSelector(CONSTANTs.LOG_IN)).click();
            Thread.sleep(2000);
            log.log("Check for First Sign In or Return User.......wait");
            WebDriver switchPage = driver.switchTo().window(parentHandle);
            try {
                if (switchPage.getWindowHandle().contains(parentHandle)) {
                    driver.switchTo().window(childHandle);
                    log.log("Indo App NOT installed..... Click Ok to accept FB permissions...");
                    optionalClick(By.cssSelector(CONSTANTs.OK_CONTINUE_AS));
                    driver.switchTo().window(parentHandle);
                }
                log.log("DONE....... ");
                // break;
            } catch (Exception e) {
                log.log("Indo App Already exist on Users Fb acct ... Move to next screen");
            }
            break;
        }
    }

    log.log("Check if User is Signed In or Has Signed In with another account.......wait");
    Thread.sleep(5000);
    try {
        if ((driver.findElement(By.cssSelector(CONSTANTs.MY_ACCOUNT_LINK)))
                .isDisplayed()) {
            log.log("First Sign In ....... Successfully Logged in Using FB.");
            Thread.sleep(3000);
            tearDown();
        }
    } catch (Exception e) {
        log.header2("Second Sign In ...... User Already signed In with a different Acct........ pls wait");
    }
    driver.switchTo().window(parentHandle);     
    Thread.sleep(3000);

    try {
        if (driver.findElement(
                By.cssSelector(CONSTANTs.ALREADY_SIGNED_UP_PASSWD_TXTBOX))
                .isDisplayed()) {
            log.log("User Already signed Up with a NATIVE acct .....Please Enter Password for Native acct");
            driver.findElement(
                    By.cssSelector(CONSTANTs.ALREADY_SIGNED_UP_PASSWD_TXTBOX))
                    .sendKeys(CONSTANTs.NATIVE_PASSWORD);
            Thread.sleep(2000);
            driver.findElement(
                    By.cssSelector(CONSTANTs.ALREADY_SIGNED_UP_BTN))
                    .click();
            Thread.sleep(2000);
            log.log("Successfully Linked NATIVE acct with FB.");
            Thread.sleep(3000);
            tearDown();
        }

    } catch (Exception e1) {
        log.log(" acct....wait, checking other acct......");
    }


    try{
        if (driver.findElement(
                By.cssSelector(CONSTANTs.SIGN_IN_WITH_GOOGLE_BTN))
                .isDisplayed()) {
            log.log("User is Signed in Already with GOOGLE account ... Click Google button to Link account.");
            Thread.sleep(3000);
            driver.findElement(
                    By.cssSelector(CONSTANTs.SIGN_IN_WITH_GOOGLE_BTN))
                    .click();
            Thread.sleep(2000);
            log.log("Successfully Linked .");
            Thread.sleep(3000);
            tearDown();
        }
    }   
        catch(Exception e2) {
            log.log("No Google acct present either.... Please contact Gigya customer support....");
            Thread.sleep(3000);
            tearDown();
        }
}

我试图在我的代码中的任何阶段通过测试后关闭浏览器,但我不断收到以下错误,简而言之,如果我的测试在任何阶段通过,请不要继续代码执行,不要挂,关闭浏览器。请仔细看看我是否有tearDown()。如果此时登录成功,则浏览器应在 sleep() 之后关闭。

拜托,我已经检查了以前的解决方案,但对我没有用。 Driver.close 或 quit 应该可以工作,但它不是,也许我做错了什么..... 提前感谢您的帮助。

线程“主”org.openqa.selenium.remote.SessionNotFoundException 中的异常:会话 ID 为空。调用 quit() 后使用 WebDriver? 构建信息:版本:'2.45.0',修订:'32a636c',时间:'2015-03-05 22:01:35' 系统信息:主机:'Ola-PC',ip:'10.255.253.14',os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.7 .0_76' 驱动程序信息:driver.version:RemoteWebDriver 在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:125) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:66) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572) 在 org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:890) 在 com.independent.helper.testPageNavi.signInFacebook(testPageNavi.java:475) 在 com.independent.helper.testing.main(testing.java:113)

【问题讨论】:

    标签: java google-chrome webdriver


    【解决方案1】:

    您将在一项特定测试后关闭 webdriver。这是一个很好的方法,但您需要为每个要运行的新测试启动一个新的 webdriver。

    你有两个选择。 1.每次测试后制作一个新的webdriver。 2. 导航回开始页面,以便您开始新的测试。

    我推荐选项 1。

    @Before
    public void before() {
        driver = new ChromeDriver();
    }
    
    @After
    public void tearDown()
    {
        driver.quit();
    }
    
    @Test
    public void signInFacebook(String link) throws InterruptedException {
        //Do 1 test here
    }
    

    【讨论】:

    • 感谢您的回复,但请给我一个样品。此外,如果我不调用 close(),在第一次成功测试通过时,我仍然会打印出 catch 中剩余的 2 条消息。这是为什么?
    • 每次尝试都是1次测试?如果这是真的,为什么不使用单元测试或至少单独的方法
    • ....是的,你是对的......我明白你的意思,但我只使用一种方法,因为它是一个连续的登录过程,会一个接一个地打开屏幕。也许我应该做的是像你建议的那样使用不同的方法,并在其他方法中调用每个方法作为一个连续的过程......你明白吗?这样做有意义吗?所以我的意思是:method1(){//code} .... method2(){method1() ... continue code} etc.
    • 是的,这很有意义!另请记住,您不需要多次关闭 webdriver。整个测试完成后只有一次。
    • 一个建议是构建您的测试,这样它们就不会变得如此冗长。如果步骤相同,您甚至可以将测试链接为依赖于前一个测试。这将避免重复执行相同的步骤。 TestNG 允许您更有效地执行此操作。例如:@Test public void registerFacebook() {...}@Test (dependsOnMethod="registerFacebook()") public void secondSignIng() {...}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2016-05-19
    相关资源
    最近更新 更多