Selenium 和 Angularjs 等待执行一些操作

2024-01-12

我正在使用 selenium 来测试 AngularJS 应用程序。我面临的问题是,在页面完全加载之前,我无法在页面上执行任何操作。我可以放置 Thread.sleep(),但据我所知,这不是一个好的解决方案。有很多方法可以等待页面加载(我用谷歌搜索),但我想我已经尝试了所有方法,但仍然没有运气。在我的应用程序中,当访问网页时,所有内容看起来都已加载(从视觉角度来看),但在整个页面加载(大约 1 秒)之前我无法执行任何活动。 你们能分享一下您的实现方式吗?它实际上是有效的

谢谢

My code:

public By ngWait(final By by) {
    return new FluentBy() {
        @Override
        public void beforeFindElement(WebDriver driver) {
            driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
            ((JavascriptExecutor) driver).executeAsyncScript("var callback = arguments[arguments.length - 1];" +
                    "angular.element(document.body).injector().get('$browser').notifyWhenNoOutstandingRequests(callback);");
            super.beforeFindElement(driver);
        }

        @Override
        public List<WebElement> findElements(SearchContext context) {
            return by.findElements(context);
        }

        @Override
        public WebElement findElement(SearchContext context) {
            return by.findElement(context);
        }

        @Override
        public String toString() {
            return "ngWait(" + by.toString() + ")";
        }
    };
}

我在使用 Selenium 针对 Angular 应用程序编写测试时遇到了类似的情况。实际上,在角度应用程序中,页面的骨架或视图会立即加载,但它会不断调用$http在后台请求获取数据。一旦角度应用程序完成$http调用,它使用 $http 调用的响应来渲染视图。因此,有一个经典的 selenium 等待waitUntilPageToBeLoad, waitUntilElementToBeClickable根本不在这里工作。另一个解决方案是Thread.Sleep()但正如你所提到的,这不是一个明智的等待。

那么为什么不使用 wait 方法来确保$http通话在后台完成。您可以尝试下面的等待方法,它对我有用。我希望它也对您有用!

    public void untilAngularFinishHttpCalls() {
        final String javaScriptToLoadAngular =
                "var injector = window.angular.element('body').injector();" + 
                "var $http = injector.get('$http');" + 
                "return ($http.pendingRequests.length === 0)";

        ExpectedCondition<Boolean> pendingHttpCallsCondition = new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor) driver).executeScript(javaScriptToLoadAngular).equals(true);
            }
        };
        WebDriverWait wait = new WebDriverWait(driver, 20); // timeout = 20 secs
        wait.until(pendingHttpCallsCondition);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium 和 Angularjs 等待执行一些操作 的相关文章

  • 在 java 8 下使用泛型出现类型错误,但在 java 7 下则不然

    我有一段代码可以在 java 7 下编译良好 但不能在 java 8 下编译 这是一个独立的重现示例 我已经采用了显示此问题的真实代码并删除了所有实现 import java util Iterator class ASTNode
  • mouseover 和 mouseout 事件在子进程上触发

    代码 div div div div 如果我将鼠标悬停在Navigation the Drop Downdiv 向下滑动 如果我将鼠标移开 它会向上滑动 问题是如果我将鼠标悬停在孩子上Drop Downdiv它也向上滑 动 有谁知道我该如何
  • 不使用 length() 方法的字符串长度[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在不使用字符串的情况下找到字符串的长度length String类的方法 str toCharArray length应该管用 或者怎么
  • 导航嵌套组件时创建面包屑 (Angular 2)

    我正在为此苦苦挣扎 这个想法是有一个组件 当浏览子视图时更新面包屑 例如
  • 获取 JSON 中的 HTML 以在 React 组件中呈现为 HTML

    试图找出如何让链接实际呈现为链接 现在 在我从 Json 文件中读取这行文本后 React 将超链接渲染为文字文本 而不将其渲染为链接 一些数据 json about John has a blog you can read a href
  • 嵌套辅助函数和性能

    嵌套辅助函数对于使代码更易于理解非常有用 谷歌甚至建议在他们的应用程序中使用嵌套函数时尚指南 https google styleguide googlecode com svn trunk javascriptguide xml Nest
  • 这种 JavaScript 编码风格有什么问题? (闭包与原型)

    我们一直在讨论如何最好地处理我们的 JS 应用程序中的对象 研究 Stoyan Stefanov 的书 阅读无数关于 新 这个 原型 闭包等的 SO 帖子 事实上有很多 而且它们有这么多相互竞争的理论 表明没有完全明显的答案 让我们假设我们
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • 为 Meteor 数据创建编号列表

    有没有办法获取 Meteor 集合中项目的编号列表的 编号 我知道我可以在 html 中做到这一点 但我觉得如果我可以在 spacebars 中放置一些东西 那么样式会更容易 如果我可以使用更好的术语 请告诉我 像这样的东西 前 20 部电
  • JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值回绕到最小值

    我创建了一个带有值的整数微调器 min 5 max 15 and initialValue 12 and wrapAround true 一旦旋转器到达max 15 增量期间的值 而不是将值重置为min 5 正如它所说文档 https op
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • React + Semantic-UI:在 UI MODAL 中使用表单

    在没有 React 的普通旧 Semantic UI 中 我已经能够毫无问题地将表单放入 Modal 中 使用 Semantic UI React 版本 我能够在模态中显示表单 但它并没有按照我期望的方式工作 例如 模态框显示后 模态框内的
  • 短 2 个字节

    我正在从串行端口读取一个长度为 133 字节的数据包 最后 2 个字节包含 CRC 值 我使用 Java 将 2 个字节值制成单个 我认为很短 这就是我所做的 short high 48 0x00ff short low 80 short
  • Cosmos DB 中的 MaxItemCount 源选项属性不起作用

    我正在尝试编写一个运行 SQL 查询的简单存储过程 并且我想通过使用 MaxItemCount 属性来限制结果 查询生成 3 个文档 但我只想返回 1 个文档 我使用 MaxItemCount 属性强制执行此限制 但这似乎不起作用 func
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 限制 jQuery id 字符串吗?

    简而言之 我的问题是字符串在 jQuery 中作为可搜索 id 或可搜索内容有什么限制 更新 我得到了 ID 部分 但不是为什么我什至无法使用该字符串搜索 html 内容 对于任何愿意告诉我一个正则表达式来将模式从 MM dd yy HH
  • javascript:window.print() 打印 2 页,而我有 1 页

    我有一个简单的 HTML 文档 其中仅包含图像标签 我想在文档加载后打印图像 我的代码 img src form1 jpg alt form1 style margin 0 auto display block 它可以工作 但问题是它打印图
  • Three.js WebGL 从着色器绘制圆形自定义填充和边框颜色

    我将 Three js 与 WebGLRenderer 一起使用 我试图找出或查看如何使用 CircleGeometry 绘制圆圈的示例 并能够从顶点或片段着色器控制其填充和边框颜色 如果不使用图像作为纹理 这是否可能 抱歉 如果这真的很简
  • 需要在没有wsdl的情况下调用soap ws

    我是网络服务的新手 这个网络服务是由 siebel 提供的 我需要调用一项网络服务 我的客户向我提供了以下详细信息 这是 SOAP 对于产品 请使用它作为端点 Request
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList

随机推荐

  • 来自不同插件的重复控制器名称

    我有一个关于 Cakephp2 3 的文件加载系统的问题 我有两个插件 让我们称它们为 联系人 和 经理 加载如下 CakePlugin load Contacts CakePlugin load Managers 它们每个都有一个名为 D
  • DBCP 连接池登录超时

    根据DBCP文件 http commons apache org dbcp apidocs org apache commons dbcp BasicDataSource html setLoginTimeout 28int 29 Basi
  • 如何将包含连字符的键的对象解构为变量? [复制]

    这个问题在这里已经有答案了 如何从键包含连字符的对象解构属性 Eg accept ranges bytes cache control public max age 0 content length 1174 content type ap
  • 为 Chrome 扩展注入 CSS

    我对 Chrome 扩展开发还很陌生 我知道可以注入CSS 但是是否可以为特定的 URL 注入它 例如 每当我访问 google com 时 CSS 就会被注入 谢谢您的帮助 那么 您有 2 个选择 编程注入和内容脚本 这些名字可能听起来非
  • 将 csv 文件导入 java swing 表

    我有纽约证券交易所所有股票报价的 csv 文件 第一列是符号第二列是公司名称 我有一个使用 java swing 库在 netbeans 中制作的搜索框和表格 现在 当我在框中输入名称时 它会返回正确的行数 例如 如果我搜索 GOOG 它只
  • 根据调整窗口大小的动态高度 div

    HTML div class header Header div div class body table class body table tr td Cell td td Cell td td Cell td tr tr td Cell
  • 如何在for循环中声明变量? (IDL)

    例如 我的文件以00 dat 01 dat 02 dat 每个文件包含多个列 我使用READCOL将它们读入变量 for i 0 n 1 do begin readcol string i F I02 dat F D D a0 b0 rea
  • postgresql中如何计算空值?

    select distinct column from table output column 1 0 0 2 null 3 1 0 但是当我尝试计算空值时 select count column from train where colu
  • 直接访问子类中自动合成的实例变量?

    为了提高效率 我想访问与子类中的属性关联的成员变量 如果我有一个声明如下的财产 interface Mumbo NSObject property nonatomic GLKVector3 position end 在 Mumbo 的实现中
  • 使用 Win32 API 连接字符串

    使用 Win32 连接字符串的最佳方法是什么 如果理解正确 正常的 C 方法是使用strcat 但由于 Win32 现在处理 Unicode 字符串 又名LPWSTR 我想不出办法strcat来处理这个 有这个功能吗 还是我应该自己写 ls
  • 从分页 URL 中删除“页面”

    我在更改 Wordpress 中的分页 URL 时遇到问题 我知道这个问题的通用解决方案是更改 WordPress 核心文件 但我只需要针对一个类别使用此解决方案 也许只有一个类别可以通过 htaccess 来完成 现在有这样的网址 htt
  • 未找到架构 x86_64 的符号 - Cmake - Mac sierra

    最近我开始了一个 C 的新项目 问题是 当我尝试编译它时 出现链接错误 我今天花了一整天的时间尝试调试它 但我并没有真正在任何地方找到好的解决方案 如果有人能帮忙那就太好了 我使用的是 Mac Sierra parsing methylat
  • 如何通过 EF Model First 数据库架构升级避免数据丢失?

    这是一个很长的问题 但如果我能就此得到一些好的建议 我将非常非常感激 简而言之 我正在寻找一种对 MS SQL 数据库模式进行版本升级的好方法 该方法还要求将数据从已删除的表移至新表 我认为 Stack Overflow 是解决这个问题最合
  • 如何在 Emacs 中输入希腊字符

    This http xahlee info emacs emacs emacs n unicode htmlpage 表明希腊字母可以通过使用插入到 Emacs 中M i 然而 Debian Squeeze 变体中的 Emacs 23 2
  • 如何将BottomAppBar + FAB与BottomNavigationView结合起来

    我想使用FloatingActionButton 以及它锚定在 BottomNavigationView 顶部的 BottomAppBar 上时的行为 我想出了一个相当 hacky 的技巧来放置BottomNavigationView在 B
  • 如何证明这个大o符号的说法?

    如何证明这一点 4n O 8n 8n O 4n 那么有哪些C and n0两种情况的值 EDIT 我试图澄清我更多 1 For a proof see formal definition of Big O http en wikipedia
  • 分布式tensorflow在运行server.__init__后独占GPU

    我有两台计算机 每台计算机都有两个 GPU 我试图从分布式张量流开始 但对它是如何工作的感到非常困惑 在计算机 A 上我想要一个ps任务 我的印象是这应该在CPU上进行 和两个worker任务 每个 GPU 一个 我想在计算机 B 上有两个
  • angularjs在控制器之间共享数据配置

    我想知道共享指令的好方法是什么 控制器之间 我有两个指令可以在不同的控制器中使用 我首先想到的是不同的配置 使用类似 html div class container div div div js controller MainCtrl f
  • 如何加载检查点文件并使用略有不同的图形结构继续训练

    当我训练图表时 我发现我忘记在图表中添加 dropout 但我已经训练了很长时间并得到了一些检查点 那么我是否可以加载检查点并添加 dropout 然后继续训练 我的代码现在是这样的 create a graph vgg fcn fcn8
  • Selenium 和 Angularjs 等待执行一些操作

    我正在使用 selenium 来测试 AngularJS 应用程序 我面临的问题是 在页面完全加载之前 我无法在页面上执行任何操作 我可以放置 Thread sleep 但据我所知 这不是一个好的解决方案 有很多方法可以等待页面加载 我用谷