量角器:计算所有超链接并在页面上测试它们

时间:2017-12-06 19:52:36

标签: javascript angularjs jasmine protractor automated-tests

我正在尝试计算页面上超链接的数量并测试它们以查看它们是否有效。我可以计算所有链接并在 JavaScript 中显示该数量,但我似乎无法在命令行的量角器中返回该值。

根据答案更新代码:

browser.waitForAngularEnabled(false);
describe('Clicks on the correct Drupal hyperlink', function() {

  it('should find all links', function () {
    browser.get('file:///C:/Users/Dasman/Documents/PROTRACTOR_E2E_TESTING/TestSite.html');
    let allLinks = element.all(by.tagName('a'));
    allLinks.count().then(function(link_tally){
      console.log('There are a total of ' + link_tally + " links on this page with proper tags.")
    })
  browser.sleep(2000);

  // A Protracterized httpGet() promise
function httpGet(siteUrl) {
  var http = require('http');
  var defer = protractor.promise.defer();

  http.get(siteUrl, function(response) {

      var bodyString = '';

      response.setEncoding('utf8');

      response.on("data", function(chunk) {
          bodyString += chunk;
      });

      response.on('end', function() {
          defer.fulfill({
              statusCode: response.statusCode,
              bodyString: bodyString
          });
      });

  }).on('error', function(e) {
      defer.reject("Got http.get error: " + e.message);
  });

  return defer.promise;
}

it('should return 200 and contain proper body', function() {
  httpGet(allLinks).then(function(result) {
    allLinks.count().then(function(statusCode){
      console.log('Status code is: ' + statusCode)
    })
      expect(result.statusCode).toBe(200);
      expect(result.bodyString).toContain('Apache');
  });
});
    });
});

另外我想"检查"链接,看看他们是否打开。有没有办法转到URL并单击所有链接并在单独的窗口中打开它们?如果链接有效或具有有效的URL,请获取属性?

我最初x路径的id并点击了链接并且当测试运行时 - 我在视觉上验证了。但是在平均页面上有15-20个链接 - 我需要一种更自动化的方式。

恩斯特的答案向我指出了解决方案,但确实需要进行一些代码重组和封装: {{3}}

2 个答案:

答案 0 :(得分:3)

要在控制台中报告您的计数,您可以执行以下操作:

//find all links
let linkCount = element.all(by.css('a'));

// count links, with then() resolve promise and log count result
linkCount.count().then(function(cnt){
    console.log('Total links = '+cnt);
});

//here you click each of the links:
linkCount.click()

您可以在此处找到有关count()then()element.all()的更多信息:http://protractortest.org/#/api

要检查链接的响应代码,这将有点棘手,因为Protractor不支持开箱即用的此类请求(see here)。

但是,有两个SO帖子herehere,它们提供了一种方法。

要逐个测试,您应该可以使用getAttribute('href')。 它会是这样的(注意:没有经过测试,但部分复制了上面提到的两个SO-Answers)

linkCount.each(function(elem){
    elem.getAttribute('href').then(function(link){
        this.httpGet("http://localhost:80").then(function(result) {
            expect(result.statusCode).toBe(200);
        });
    });
});

// A Protracterized httpGet() promise
this.httpGet = function(siteUrl) {
    var http = require('http');
    var defer = protractor.promise.defer();

    http.get(siteUrl, function(response) {

        var bodyString = '';

        response.setEncoding('utf8');

        response.on("data", function(chunk) {
            bodyString += chunk;
        });

        response.on('end', function() {
            defer.fulfill({
                statusCode: response.statusCode,
                bodyString: bodyString
            });
        });

    }).on('error', function(e) {
        defer.reject("Got http.get error: " + e.message);
    });

    return defer.promise;
}

答案 1 :(得分:0)

您还可以尝试从每个链接获取文本并计算所有数组元素,如下所示:

var allLinks = element.all(By.tagName('a'));
allLinks.getText().then(function(findAllLink) {
var numberofLinks = findAllLink.length;
console.log(numberofLinks);
})