自动进行Gmail登录[在oAuth期间]用户验证阻止了

时间:2018-08-11 03:06:34

标签: selenium automation webdriver gmail selenium-chromedriver

此代码可用于登录gmail

public void login(User user) {
    WebDriverWait wait = new WebDriverWait(driver, 60);
    WebElement emailTextBox = wait.until(
            ExpectedConditions.visibilityOfElementLocated(By.id("identifierId")));
    emailTextBox.sendKeys(user.email);

    WebElement nextButton = wait.until(
            ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(text(), 'Next')]")));
    nextButton.click();

    WebElement passwordTextBox = wait.until(
            ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@type='password']")));
    passwordTextBox.sendKeys(user.password);

    nextButton = wait.until(
            ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(text(), 'Next')]")));
    nextButton.click();
}

问题

我们有一个受测试的Web应用程序,用户可以在其中登录google(oAuth2),但是gmail会通过用户验证(重置密码或验证码或电话号码)来捕获自动化脚本。

问:

有什么方法可以避免Gmail用户验证?

(我不是要解决Google验证挑战,在用户手动运行的普通浏览器中,此验证挑战不会触发(大多数情况下),但是使用硒有时会发生,并且无法通过我的测试。)

更新19.08.2018

这是一个死胡同,绕过google验证并非易事,在进行更多搜索后,我发现服务虚拟化是解决此问题的正确方法,可能是Hoverfly

1 个答案:

答案 0 :(得分:0)

使用cookie解决了我的问题

public HomePage googleAutoLogin(String cookieKey, String cookieValue) {
    Calendar cal = Calendar.getInstance();
    Date today = cal.getTime();
    cal.add(Calendar.HOUR, 1);
    Date afterOneHour = cal.getTime();

    driver.manage().deleteAllCookies();

    Cookie cookie = new Cookie.Builder(cookieKey, cookieValue)
            .domain("qreflect.com")
            .path("/")
            .expiresOn(afterOneHour)
            .isHttpOnly(true)
            .build();

    driver.manage().addCookie(cookie);
    driver.navigate().refresh();
    logger.log(Level.INFO, "Finished adding cookie");

    return this;
}

您必须手动登录一次,然后检查以获取与您的应用会话相关的cookie,将它们存储在某个地方并传递密钥,此方法的值以进行登录。