是否可以使用 for 循环进行 DRY 量角器测试?*VaR 即将出现未定义*

Is it possible to use a for loop for DRY protractor test? *var coming up undefined*

本文关键字:VaR 未定义 测试 量角器 for 可以使 循环 DRY 是否      更新时间:2023-09-26

目标:我想在it块上做一个循环,测试元素文本是否匹配。

错误:Error: No element found using locator: by.cssContainingText(".submenu li a", "undefined")

问:如何编写 for 循环来测试多个列表项? 此外,我如何使var title对内在it block可见

对于此示例:我有 2 个测试,我想通过循环 DRY下一个测试示例只是下面的伪代码不起作用的工作测试

var config = require('../../protractor.conf.js').config;
describe('this Homepage Body Tests', function(){
  browser.driver.get(config.homepageUrl);
  describe('sub navigation functionality', function () {
    //creates teh array of strings for this sample
    var title = ['find a store', 'clinic'];

    for(var i = 0; i < title.length; i++){
      it("should open find a" + title[i] + "page", function(){
        browser.driver.sleep(2000);
        browser.ignoreSynchronization = true;
        var link = element(by.cssContainingText('.submenu li a', title[i]));
        expect(link.getText()).toEqual(title[i]);

      });
    };
 });
});

.HTML:

  <div class="submenu">
    <ul>
        <li><a >find a store</a>
        </li>
        <li><a>clinic</a>
        </li>
    </ul>
  </div>

工作测试示例:

it("should open find a store page", function(){
  browser.driver.sleep(2000);
  browser.ignoreSynchronization = true;
  var title = 'find a store';
  var link = element(by.cssContainingText('.submenu li a', title));

  expect(link.getText()).toEqual(title);

});
it("should open find a clinic page", function(){
  browser.driver.sleep(2000);
  browser.ignoreSynchronization = true;
  var title = 'clinic';
  var link = element(by.cssContainingText('.submenu li a', title));

  expect(link.getText()).toEqual(title);

});

更新:

it("should open find a store page", function(){
      browser.driver.sleep(2000);
      browser.ignoreSynchronization = true;
      var string = 'find a store';
      var main = '.main';
      var link = element(by.cssContainingText('.submenu li a', string));

      expect(link.getText()).toEqual(string);
      //I WANT OT CLICK ON THAT TOO!
      link.click().then(function() {
        browser.driver.sleep(3000);
        var title = element(by.cssContainingText(main, string));
        expect(title.getText()).toBe(string);
      });
    });
这就是

element.all() + map()会有所帮助的地方:

var titles = element.all(by.css('.submenu li a')).map(function (elm) {
    return elm.getText();
});
expect(titles).toBeArrayOfStrings();
expect(titles).toEqual(['find a store', 'clinic']);

仅供参考,这是相关的功能请求:

  • 将 map(( 函数添加到 element.all

另请参阅:

  • 量角器 - 如何将一个承诺数组的结果放入另一个数组中
  • AngularJS + 量角器对中继器中的所有行值求和