自动化gmail登录[在oAuth期间]被用户验证阻止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化gmail登录[在oAuth期间]被用户验证阻止相关的知识,希望对你有一定的参考价值。

此代码适用于登录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用户验证吗?

(我不是要求解决谷歌验证挑战,在用户手动运行的普通浏览器中,此验证挑战不会被触发(大多数时候),但是有时会发生硒,并且我的测试失败了。)

更新于19.08.2018

这是一个死胡同,绕过谷歌验证并不是微不足道的,在搜索更多时我发现服务虚拟化是解决这个问题的正确方法,可能是Hoverfly

答案

使用cookies解决了我的问题

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,将它们存储在某处并将密钥,值传递给此方法以登录。

以上是关于自动化gmail登录[在oAuth期间]被用户验证阻止的主要内容,如果未能解决你的问题,请参考以下文章

将 Firebase Google OAuth 身份验证限制为特定用户

如何使用 Twisted 通过 OAuth2.0 身份验证检查 Gmail

Gmail插件可在没有oAuth的情况下连接到非Google服务

无需 oAuth 即可连接到非 Google 服务的 Gmail 插件

如何以编程方式确认Gmail自动转发验证?

oAuth2 gmail 集成错误