此代码可用于登录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。
答案 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,将它们存储在某个地方并传递密钥,此方法的值以进行登录。