量角器:无法添加新方法来返回FindElement

时间:2015-08-10 14:21:29

标签: angularjs protractor angularjs-e2e e2e-testing

我想扩展FindElement和FindArrayElement库。我可以这样写:

//ef_extend.js
protractor.ElementFinder.prototype.getColumnList = function() {
  return this.all(webdriver.By.xpath('//td[@id="SSW_1_0"]/..//tr[@class="n-grid__head-row"]/th'));
};

var ps_grid = element(by.id(ps_grid_id));
var all_columns = ps_grid.getColumnList();

现在我总是有错误:

TypeError: Invalid locator 
   Stacktrace:
     TypeError: Invalid locator
    at Function.webdriver.Locator.checkLocator (c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\locators.js:244:9)
    at [object Object].webdriver.WebElement.findElements (c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:1899:31)
    at c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\lib\element.js:149:32
    at Array.forEach (native)
    at c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\lib\element.js:146:27

如果我写' by'相反' By'我有这样的信息:

TypeError: Cannot read property 'xpath' of undefined

Stacktrace:
     TypeError: Cannot read property 'xpath' of undefined
    at [object Object].protractor.ElementFinder.getColumnList (C:\Git\ng_components\test\protractor\lib\ef_extend.js:21:31)
    at [object Object].<anonymous> (C:\Git\ng_components\test\protractor\resource\ps-grid_spec_2.1.a.js:28:29)
    at [object Object].jasmine.Env.describe_ (c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:913:21)
    at [object Object].jasmine.Env.describe (c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:898:15)
    at describe (c:\Users\Lilia.Sapurina\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:658:27)
    at Object.<anonymous> (C:\Git\ng_components\test\protractor\resource\ps-grid_spec_2.1.a.js:11:1)

1 个答案:

答案 0 :(得分:1)

您正在展开ElementArrayFinder,但需要扩展ElementFinder

protractor.ElementFinder.prototype.getColumnList = function() {
    return this.all(protractor.By.xpath('//td[@id="SSW_1_0"]/..//tr[@class="n-grid__head-row"]/th'));
};