📜  Protractor-调试

📅  最后修改于: 2020-12-06 10:25:23             🧑  作者: Mango


既然我们已经在前几章中看到了Protractor的所有概念,那么让我们在本章中详细了解调试概念。

介绍

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

故障类型

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

WebDriver故障

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

WebDriver意外失败

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

角度的量角器故障

当量角器未按预期在库中找到Angular时,会发生Protractor for Angular的失败。

量角器Angular2失败

在这种失败中,如果在配置中找不到useAllAngular2AppRoots参数,则量角器将失败。发生这种情况的原因是,如果不这样做,测试过程将只关注一个根元素,而期望过程中不止一个元素。

量角器超时超时

当测试规范遇到一个循环或一个较长的池并且无法及时返回数据时,会发生这种故障。

期望失败

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

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

假设,如果您已经编写了测试用例,但是它们失败了,那么了解如何调试这些测试用例就非常重要,因为很难找到发生错误的确切位置。使用量角器时,在命令行中红色字体会出现一些长时间的错误。

暂停和调试测试

在&miuns;中说明了在量角器中调试的方法。

暂停方式

使用暂停方法在量角器中调试测试用例是最简单的方法之一。我们可以在要暂停测试代码&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

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

调试器方法

使用暂停方法在量角器中调试测试用例是一种高级方法。我们可以在想要破坏测试代码的位置键入以下命令-

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

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