如何在Selenium中测试“记住我”复选框功能

时间:2015-03-30 05:25:42

标签: java selenium cookies selenium-webdriver testng

我正在尝试测试登录表单的“记住我”功能。我可以输入用户名和密码,点击复选框,点击提交,然后点击quit()close()浏览器。但是当我用new ChromeDriver()(或任何其他WebDriver实现)重新打开浏览器时,测试站点不记得任何内容,因为浏览器关闭时所有cookie都被删除,重新打开浏览器时无法访问

2 个答案:

答案 0 :(得分:4)

适用于Chrome(配置):

您必须设置user-dir的路径,这将在您首次登录后保存所有登录信息。下次再次登录时,将从user-dir获取登录信息。

System.setProperty("webdriver.chrome.driver", "res/chromedriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");
options.addArguments("start-maximized");
options.addArguments("user-data-dir=D:/temp/");
capabilities.setCapability("chrome.binary","res/chromedriver.exe");
capabilities.setCapability(ChromeOptions.CAPABILITY,options);
WebDriver driver = new ChromeDriver(capabilities);

第一次登录:

driver.get("https://gmail.com");
//Your login script typing username password, check 'keep me signed in' and so on

关闭驱动程序(不要退出):

driver.close();

重新初始化驱动程序并导航到该站点。不应再次要求您输入用户名和密码:

driver = new ChromeDriver(capabilities);
driver.get("http://gmail.com");

使用firefox配置文件可以为firefox实现上述功能。

答案 1 :(得分:1)

如果使用持久性cookie实现“记住我”功能(我怀疑还有其他方法可以实现它),那么您可以通过以编程方式操作cookie以跨浏览器兼容的方式实际测试该功能。有效期(或Expiry in the Selenium API)的Cookie为persistent cookies and are stored when the browser is closed and retrieved when the browser is re-opened。浏览器关闭时不会存储非持久性cookie。通过这些信息,我们可以通过以编程方式删除所有非持久性cookie来模拟浏览器关闭时应该发生的事情:

// Check the "Remember Me" checkbox and login here.

Set<Cookies> cookies = webDriver.manage().getCookies();

for (Cookie cookie : cookies) {

    // Simulate a browser restart by removing all non-persistent cookies.
    if (cookie.getExpiry() == null) {
        webDriver.manage().deleteCookie(cookie);
    }
}

// Reload the login page.
webDriver.get(currentLoginPageURL);

// Assert that some text like "You are logged in as..." appears on the page to
// indicate that you are still logged in.