自动化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服务