Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试通过后关闭浏览器_Java_Google Chrome_Webdriver - Fatal编程技术网

Java 测试通过后关闭浏览器

Java 测试通过后关闭浏览器,java,google-chrome,webdriver,Java,Google Chrome,Webdriver,我试图在代码的任何阶段通过测试后关闭浏览器,但下面不断出现错误,我试图做的是,如果我的测试在任何阶段通过,不要继续执行代码,不要挂起,而是关闭浏览器。请仔细看看我有没有被撕下()。如果此时登录成功,则浏览器应在睡眠()后关闭 请,我已经检查了以前的解决方案,但没有为我工作。Driver.close或quit应该可以工作,但不是,可能我做错了。。。。。 提前谢谢你的帮助 线程“main”org.openqa.selenium.remote.SessionNotFoundException中的异常:

我试图在代码的任何阶段通过测试后关闭浏览器,但下面不断出现错误,我试图做的是,如果我的测试在任何阶段通过,不要继续执行代码,不要挂起,而是关闭浏览器。请仔细看看我有没有被撕下()。如果此时登录成功,则浏览器应在睡眠()后关闭

请,我已经检查了以前的解决方案,但没有为我工作。Driver.close或quit应该可以工作,但不是,可能我做错了。。。。。 提前谢谢你的帮助

线程“main”org.openqa.selenium.remote.SessionNotFoundException中的异常:会话ID为null。调用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)

。这是一个很好的批准,但是您需要为您想要运行的每个新测试启动一个新的webdriver

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

我建议选择1

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();
        }
}

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

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

我建议选择1

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();
        }
}

谢谢你的回复,但是你能给我一个样品吗。另外,如果我没有调用close(),在第一次成功通过测试时,我仍然会得到catch中剩余的2条消息。为什么会这样?每次试一次?如果这是真的,为什么不使用单元测试或至少单独的方法……是的,你是对的。。。。。我明白了,但我只使用了一种方法,因为这是一个连续的登录过程,会一个接一个地打开屏幕。也许我应该像你建议的那样使用不同的方法,并在其他方法中作为一个连续的过程调用每个方法。。。。你明白我的意思吗?。这样做有意义吗?所以我的意思是:
method1(){//code}。。。。method2(){method1()…continue code}等等。
是的,这很有意义!还要记住,您不需要多次关闭webdriver。只有一次,当整个测试完成时。一个建议是构建您的测试,这样它们就不会变得太长。如果步骤相同,您甚至可以将测试链接为依赖于上一个测试。这将避免重复执行相同的步骤。TestNG允许您更高效地完成这项工作。例如:
@Test public void registerFacebook(){…}
@Test(dependsOnMethod=“registerFacebook()”)public void secondSignIng(){…}
谢谢您的回复,但您能给我一个示例吗。另外,如果我没有调用close(),在第一次成功通过测试时,我仍然会得到catch中剩余的2条消息。为什么会这样?每次试一次?如果这是真的,为什么不使用单元测试或至少单独的方法……是的,你是对的。。。。。我明白了,但我只使用了一种方法,因为这是一个连续的登录过程,会一个接一个地打开屏幕。也许我应该像你建议的那样使用不同的方法,并在其他方法中作为一个连续的过程调用每个方法。。。。你明白我的意思吗?。这样做有意义吗?所以我的意思是:
method1(){//code}。。。。method2(){method1()…continue code}等等。
是的,这很有意义!还要记住,您不需要多次关闭webdriver。只有一次,当整个测试完成时。一个建议是构建您的测试,这样它们就不会变得太长。如果步骤相同,您甚至可以将测试链接为依赖于上一个测试。这将避免重复执行相同的步骤。TestNG允许您更高效地完成这项工作。例如:
@Test public void registerFacebook(){…}
@Test(dependsOnMethod=“registerFacebook()”)public void secondSignIng(){…}