需要浏览器url substring里面的功能

时间:2016-05-10 13:24:32

标签: javascript protractor angular-promise webdriverjs

我正在开发角度应用程序自动化,我编写了一个常用函数,需要在我的测试中的多个位置调用以获取动态生成的表单ID。这个函数总是返回{{[PromiseStatus]]:" pending"}"]错误。

  

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)

在我做错的地方,有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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);
    });
}