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

2023-11-30

此代码用于登录 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();
}

Problem

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

Q:

有什么办法可以避免gmail用户验证吗?

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

更新 19.08.2018

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


使用 cookie 解决了我的问题

public HomePage googleAutoLogin(String cookieKey, String cookieValue) {
    Calendar cal = Calendar.getInstance();
    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,将它们存储在某处并将键/值对传递给此方法才能登录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动 gmail 登录 [在 oAuth 期间] 因用户验证而被阻止 的相关文章

随机推荐

  • php/Mysql 查询插入日期失败

    我已经搜索了很长一段时间 但我不明白为什么我的查询不适用于日期 我希望它作为日期导入到我的数据库中 这是上级的选择 所以我在这里 insert query INSERT INTO enrties datum VALUES mysql rea
  • Java本地方法源代码[重复]

    这个问题在这里已经有答案了 哪里可以下载java原生方法源代码 比如我想知道源码System arraycopy 但我找不到 您可以下载OpenJdk源代码here 在文件夹中jdk src share你可以获得源代码 jdk src sh
  • KeyBindings 和 KeyListener 之间的区别

    如果您可以这样做 那么 KeyBindings 的意义何在 Imports public void Test JButton button1 JButton button2 JButton button3 Test button1 new
  • 如何在JQuery中进行算术运算?

    var price addprice val var pass pass val var total totalprice attr value var left leftquota attr value var balance balan
  • JDBC 中的 EntityManager 刷新模式

    JPA 本质上是 JDBC 的更高抽象 EntityManager 有一个 API setAutoFlushMode 它可以设置为 AUTO 或 COMMIT 在 JDBC 术语中 这相当于什么 谢谢 JDBC 也具有自动提交功能 它们都用
  • Ant build.xml需要用户输入,但Eclipse没有tty

    我正在尝试将 Eclipse 与我的 build xml 更好地集成 我的构建文件为程序的本机部分调用 GNU Make 并且 Makefile 使用 sudo 将编译的库移动到系统路径中 不幸的是 这需要输入密码 并且 Eclipse 的
  • 安全地检查变量的类型

    对于系统 我需要将指针转换为 long 然后将 long 转换回指针类型 正如您可以猜到的那样 这是非常不安全的 我想做的是使用dynamic cast来进行转换 所以如果我混合它们 我会得到一个空指针 这一页说http publib bo
  • rabbitmq-server安装CentOS - Erlang错误

    我有centos 6并尝试使用rpm安装rabbitmq 3 5 3 没有 yum 选项 这让我陷入了错误 root osboxes CentOS rpm Uvh rabbitmq server 3 5 3 1 noarch rpm war
  • C++ 自定义操作返回空字符串

    我们在 C 中的延迟自定义操作方面遇到问题 我们只需要自定义操作数据属性 apacheconfpath 的值 该属性目前具有测试的虚拟值 这是我们的 C 自定义操作 UINT stdcall AppendToApacheConfigFile
  • Unity2D:缩放游戏对象而不缩放其子对象

    我有一个敌人 里面有孩子 敌人也有死亡动画 在死亡动画中 使用动画师 我将敌人缩放到适当的大小 然而 敌人内部的孩子也被缩小 即使我在孩子上有一个动画 我已经调整了它的大小 我还在这个孩子上添加了锚点位置 有没有办法既能缩小敌人的规模 又能
  • Azure 事件中心 - 异地恢复:它是否复制到次要区域?

    根据微软的文章 https learn microsoft com en us azure event hubs event hubs geo dr 根据设计 事件中心异地灾难恢复不会复制数据 因此您无法在辅助事件中心上重复使用主事件中心的
  • Node.js 错误:找不到模块“请求”

    好的 这是一个常见的错误 我已经读过这篇文章node js 找不到模块 请求 请求模块安装在我的node modules中 我的完整节点应用程序是 var r require request var s r http www foo com
  • PowerShell:GetNewClosure() 和带验证的 Cmdlet

    我试图了解 GetNewClosure 如何在 PowerShell 2 中的脚本 cmdlet 上下文中工作 本质上 我有一个返回对象的函数 如下所示 function Get AnObject param CmdletBinding P
  • 如何处理删除函数中的 GORM 错误?

    我有这个功能 var db gorm DB func DeleteCategory id uint error var category Category category ID id result db Delete category f
  • 运行 chrome 扩展并在页面加载时将数据提交到 PHP 脚本(自动化该过程)

    我第一次使用 chrome 扩展进行网络爬行 我在 HTML 弹出窗口中获取数据 然后在单击按钮时将其提交给 PHP 脚本 现在我想在页面加载时执行此功能 因此 页面加载数据将被收集并将其提交给 PHP 脚本 我正在使用如下扩展 清单 js
  • 如何在Android中使用intentservice同时下载多个文件?

    我想创建一项与此类似的服务 参考来自Here 在 Android 中异步下载多个文件 public static class DownloadingService extends IntentService public static St
  • 线程中的 QTimer - 事件未处理?

    我有一个从 QThread 派生的对象 类定义包括 Q OBJECT 宏 我在线程中创建了一个计时器 这样我就可以在线程运行时偶尔进行一些检查 但是 超时事件从未发生 我也尝试过将计时器设为单次 但没有发出任何事件 默认情况下事件是在线程中
  • php 驱动程序 mongodb ,从未加载

    我已经安装了 MongoDB wamp 服务器 并且在 MongoDB 中添加了一个集合 然后我从下载了 php mongo 1 6 8 zipS3 gt 确定 zip 文件中有很多文件 但我需要哪一个 Windows 10 64 位 我找
  • iOS 中的透明环

    我的视图中有一个圆形头像 我这样做是这样的 self imageView layer cornerRadius 75 self imageView layer masksToBounds YES self imageView layer b
  • 自动 gmail 登录 [在 oAuth 期间] 因用户验证而被阻止

    此代码用于登录 Gmail public void login User user WebDriverWait wait new WebDriverWait driver 60 WebElement emailTextBox wait un