当前位置: 首页 > 面试题库 >

什么是量角器中的browser.ignoreSynchronization?

酆鸿彩
2023-03-14
问题内容

我见过很多次有人建议使用它:

browser.ignoreSynchronization=true;  // or false

但是我不明白为什么我们需要它?


问题答案:

一个简单的答案是,它使量角器不必等待Angular承诺,例如来自$http$timeout解决的Angular承诺,如果您在$http或期间$timeout(例如,“正在加载”消息)测试行为或测试非Angular承诺,角度站点或页面,例如单独的登录页面。

例如,要测试在请求期间设置加载消息的按钮,可以true在获取元素时将其设置为+检查其内容

element(by.css('button[type="submit"]')).click();
browser.ignoreSynchronization = true;
expect(element(by.css('.message')).getText().toBe('Loading...');    
browser.ignoreSynchronization = false;
expect(element(by.css('.message')).getText().toBe('Loaded');

一个更复杂的答案是将其设置为true意味着对控制流的后续添加/注入也不会添加browser.waitForAngular。在某些情况下,了解控制流以及何时/如何添加/注入控制流很重要。例如,如果您要browser.wait测试多阶段流程,则将测试中的其余功能添加到wait控制流
之后 ,将传递给的功能注入到控制流中。

element(by.css('button[type="submit"]')).click();
browser.ignoreSynchronization = true;
expect(element(by.css('.message')).getText().toBe('Stage 1');
browser.wait(function () {
   // This function is added to the control flow after the final
   // browser.ignoreSynchronization = false in the test
   // so we need to set it again here 
   browser.ignoreSynchronization = true;
   return element(by.cssContainingText('.message', 'Stage 2')).isPresent().then(function(isPresent) { 
     // Cleanup so later tests have the default value of false
     browser.ignoreSynchronization = false;
     return !isPresent;
   });
});
expect(element(by.css('.message')).getText().toBe('Stage 2');
browser.ignoreSynchronization = false;
expect(element(by.css('.message')).getText().toBe('Stage 3');

另一种使用方法browser.ignoreSynchronization是直接访问标准的webdriver API

element(by.css('button[type="submit"]')).click();
expect(browser.driver.findElement(by.css('.message')).getText().toBe('Loading...');    
expect(element(by.css('.message')).getText().toBe('Loaded');

直接使用驱动程序方法来查找元素意味着系统将尝试查找它们而无需等待任何正在进行的$http请求完成,就像设置browser.ignoreSynchronization = true



 类似资料:
  • 问题内容: 我最近正在浏览量角器API,并注意到该方法: 调度命令以在webdriver的控制流上下文中执行自定义功能。 我想将此功能添加到我的工具箱中,但是我不确定我完全了解何时可以在实践中使用它,以及它涵盖哪些用例? 问题答案: 量角器的工作方式是有一个内部队列,在其中设置函数的顺序。因此,如果您要在测试中的某个地方调用某个函数而不告诉量角器,则该函数将不在队列中,并且该函数的实际执行可能随时

  • 下拉列表包含和包含可见的: 我无法使用此代码: 我没有下拉列表的值。 在这种情况下,下拉列表的量角器代码应该是什么?

  • 问题内容: 新用户在这里。 经过数小时的抽烟和回归测试,在网上阅读了许多案例后,我发现phantomjs被认为很难与量角器一起运行。到目前为止,Jenkins一直在为所有任务运行phantomjs。 他们需要这些测试才能作为未安装窗口系统的ci的一部分运行。 因此,如果有关于完全无头浏览器或无头chrome的建议(这将是最有益的)并逐步进行设置,我将不胜感激。我已经有一个conf.js和e2e.c

  • 不,这不是一个重复的问题。你看,SO和Github中有大量的问题和问题,规定我将此指令添加到具有指令且未包含在表单中的标记中。如果我不添加它,我会得到一个错误: 好的,如果我把这个属性放在那里,错误就会消失。但是,等等!没人知道它是干什么的!Angular的医生一点也没提到。当我知道我不需要值访问器时,为什么我需要它?此属性如何连接到值访问器?该指令的作用是什么?什么是值访问器?如何使用它? 为什

  • 角色决定了员工的管理范围、功能权限,一个员工可以有多个角色。当员工拥有多个角色时,其管理范围、功能权限为多个角色相加。 管理范围 您可设置角色的管理范围,若设置该角色管理范围为部门,则可管理员工与单据;和设置该员工管理范围为项目,则可管理单据。部门支持选择所有部门、所在的部门及所有子部门、指定部门 项目支持选择所有项目、所在的项目及所有子项目、指定项目 功能权限 您可设置角色的功能权限,其中单据、

  • 经过数小时的构建我的烟雾和回归测试,我发现在网上阅读了许多案例后,phantomjs是已知的一个麻烦运行与量角器。Jenkins一直在运行phantomjs来完成目前为止赋予它的所有任务。 他们需要这些测试作为配置项的一部分运行,而配置项没有安装窗口系统。 因此,如果有一个完全无头浏览器或无头chrome(这将是最有益的)的推荐和一步一步地设置它,我将非常感激。我已经有一个conf.js和一个e2