量角器 – 调试

量角器 – 调试


现在我们已经在前面的章节中看到了 Protractor 的所有概念,让我们详细了解本章中的调试概念。

介绍

端到端 (e2e) 测试非常难以调试,因为它们依赖于该应用程序的整个生态系统。我们已经看到它们依赖于各种操作,或者特别是我们可以说依赖于先前的操作,例如登录,有时它们依赖于许可。调试 e2e 测试的另一个困难是它对 WebDriver 的依赖,因为它在不同的操作系统和浏览器中的作用不同。最后,调试 e2e 测试还会生成很长的错误消息,并且很难将浏览器相关问题和测试过程错误分开。

故障类型

测试套件失败可能有多种原因,以下是一些众所周知的失败类型 –

网络驱动程序故障

当命令无法完成时,WebDriver 会抛出错误。例如,浏览器无法获取定义的地址,或者未按预期找到元素。

WebDriver 意外失败

当无法更新 Web 驱动程序管理器时,会发生意外的浏览器和与操作系统相关的故障。

Angular 的量角器故障

当 Protractor 没有按预期在库中找到 Angular 时,就会发生 Protractor for Angular 的失败。

量角器Angular2失败

在这种失败的情况下,如果配置中没有找到 useAllAngular2AppRoots 参数,Protractor 就会失败。发生这种情况是因为,如果没有这个,测试过程将查看一个单一的根元素,同时期望过程中有多个元素。

超时的量角器失败

当测试规范遇到循环或长池并且未能及时返回数据时,就会发生这种失败。

预期失败

最常见的测试失败之一,显示了正常的预期失败是什么样的。

为什么在量角器中调试很重要?

假设,如果您编写了测试用例并且它们失败了,那么知道如何调试这些测试用例非常重要,因为很难找到发生错误的确切位置。在使用 Protractor 时,您会在命令行中出现一些红色字体的长错误。

暂停和调试测试

在量角器中调试的方法在这里解释&miuns

暂停方法

在 Protractor 中使用 pause 方法调试测试用例是最简单的方法之一。我们可以在要暂停测试代码的地方输入以下命令 &miuns

browser.pause();

当运行代码命中上述命令时,它会在该点暂停正在运行的程序。之后,我们可以根据自己的喜好给出以下命令 –

前进的C型

每当命令用完时,我们必须键入 C 才能前进。如果你不输入 C,测试将不会运行完整的代码,并且会由于 Jasmine 超时错误而失败。

输入 repl 以进入交互模式

交互模式的好处是我们可以将 WebDriver 命令发送到我们的浏览器。如果我们想进入交互模式,那么输入repl

键入 Ctrl-C 退出并继续测试

为了从暂停状态退出测试并从停止的地方继续测试,我们需要输入 Ctrl-C。

例子

在这个例子中,我们有一个名为example_debug.js 的规范文件,量角器尝试通过 locator by.binding (‘mmmm’)来识别一个元素,但是 URL( https://angularjs.org/页面没有指定的元素定位器。

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      element(by.model('yourName')).sendKeys('Vijay');
         //Element doesn't exist
         var welcomeText = 
         element(by.binding('mmmm')).getText();
         expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

现在,为了执行上面的测试,我们需要在上面的规范文件中添加 browser.pause() 代码,在你想要暂停测试的地方。它看起来如下 –

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.pause();
      element(by.model('yourName')).sendKeys('Vijay');
      //Element doesn't exist
      var welcomeText = 
      element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

但是在执行之前,我们还需要对配置文件进行一些更改。我们正在对之前使用的配置文件进行以下更改,在上一章中命名为example_configuration.js

// An example configuration file.
exports.config = {
   directConnect: true,

   // Capabilities to be passed to the webdriver instance.
   capabilities: {
      'browserName': 'chrome'
   },

   // Framework to use. Jasmine is recommended.
   framework: 'jasmine',

   // Spec patterns are relative to the current working directory when

   // protractor is called.
   specs: ['example_debug.js'],
      allScriptsTimeout: 999999,
      jasmineNodeOpts: {
      defaultTimeoutInterval: 999999
   },
   onPrepare: function () {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(5000);
   }
};

现在,运行以下命令 –

protractor example_configuration.js

调试器将在上述命令后启动。

调试器方法

在 Protractor 中使用 pause 方法调试测试用例是一种有点高级的方法。我们可以在想要破坏测试代码的地方输入以下命令 –

browser.debugger();

它使用节点调试器来调试测试代码。要运行上述命令,我们必须在从测试项目位置打开的单独命令提示符中键入以下命令 –

protractor debug protractor.conf.js

在这种方法中,我们还需要在终端中键入 C 才能继续测试代码。但与暂停方法相反,在此方法中只输入一次。

例子

在这个例子中,我们使用了上面使用的名为 b example_debug.js的相同规范文件唯一的区别是,我们需要在要破坏测试代码的地方使用browser.debugger()而不是browser.pause()它看起来如下 –

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.debugger();
      element(by.model('yourName')).sendKeys('Vijay');
      //Element doesn't exist
      var welcomeText = element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

我们使用与上面示例中相同的配置文件example_configuration.js

现在,使用以下调试命令行选项运行量角器测试

protractor debug example_configuration.js

调试器将在上述命令后启动。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁