2016-05-10 29 views
0

我正在处理角应用自动化,我已经写了一个通用函数,需要在我的测试中的多个地方调用以获取动态生成的表单ID。此功能总是返回我{[PromiseStatus]: “待定”}“。]错误需要浏览器url substring功能

CommonFunctions.js

var common_functions = function() {  
this.getFormId = function() { 
    // var url = "http://localhost/test/#/submission/207/form/1976"; 
    return browser.getCurrentUrl().then(function(url){ 
     return url.substr(-4); 
    }); 

    } 
}; 

现在,这个功能正在pageobject文件用得到该元素定位

PageObject文件:

var general_information = function() { 
     this.street1 = function(field1) { 
     var formid = common_functions.getFormId(); 
     var street="fieldValue.street1_".concat(formid); 
     element(by.model(street)).sendKeys(field1); 
    } 

最后,当我在我的测试脚本中调用此函数时,出现错误。

测试脚本:

it("Verify that user is able to fill values in general information", function(){ 

     general_information.street1('Street Victoria'); 
     general_information.zipCode('1004'); 

    }); 

例外出现:

Failed: invalid element state: Failed to execute 'querySelectorAll' on 'Document': '[ng-model="fieldValue.street1_Promise::1833 {[[PromiseStatus]]: "pending"}"]' is not a valid selector. 
    (Session info: chrome=50.0.2661.94) 
    (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 6.1 SP1 x86_64) 

有人可以帮我这个我在哪里做错了?

回答

0

这是因为getFormId()函数返回promise。并且,由于您需要解决承诺的价值,因此您需要使用.then()

this.street1 = function(field1) { 
    common_functions.getFormId().then(function (formid) { 
     var street = "fieldValue.street1_".concat(formid); 
     element(by.model(street)).sendKeys(field1); 
    }); 
} 
+0

谢谢alecxe ...此作品!我意识到Promise没有得到解决,但没有做出正确的修改! – AnuragT