2014-04-15 104 views
4

我試圖在我的網站上使用量角器模擬用戶故事。使用量角器設置角模型

用戶必須鍵入使用自動完成的輸入。在現實生活中,用戶必須在輸入中鍵入一些文本,然後使用她的鼠標或更自然的松鼠鍵選擇正確的命題。

問題是,我似乎無法模擬與量角器。 element.sendKeys只是不允許你這樣做。我已經嘗試了十幾種不同的方式,它最多也會產生不可預知的結果。

所以我想操縱ng模型直接拋出我的輸入。有沒有辦法從Protractor訪問一個元素的作用域並調用它的函數/設置屬性?

這裏是我的問題的一個簡化版本:

查看:

<div ng-controller="MyController"> 
    <input id="my-input" ng-model="myModel"/> 
</div> 

控制器:

myModule.controller('MyController', ['$scope', function($scope){ 
    $scope.myModel = ""; 
    //[...] 
}]); 

E2E量角器測試:

describe("setting myModel to a fixture value", function(){ 
    it("should set myModel to 'a test value'", function(){ 
    var myInput = element('my-input'); 
    // Now what? 
    }); 
}); 
+0

一些小提琴,或一些代碼片段? –

+0

我已經添加了一些代碼片段。 –

+0

是'element('my-input');'你的真實代碼?我會嘗試的序列是'myInput.click()'給它焦點,然後'myInput.sendKeys('beginningOfAnAutoCompletedWord');'然後''myInput.sendKeys('Protractor.Key.ARROW_DOWN');'。然後,根據您的實施情況,您可以點擊或發送一個標籤或Enter鍵。 – glepretre

回答

4

在這樣的回答: How to select option in drop down protractorjs e2e tests

他們使用這個:.sendKeys(protractor.Key.ARROW_DOWN);發送向下箭頭。

它值得一試。

+0

實際上'.sendKeys(protractor.Key.ARROW_DOWN)'更具可讀性。 – fracz

+0

@fracz我現在試過了,它收到一個關於「RangeError:最大呼叫卡尺寸超出」的錯誤 –

5

您可以使用.evaluate()直接設置模型值:

var elm = element(by.model("obj.field")); 
elm.evaluate("obj.field = 'test';"); 

要獲取模型值:

elm.evaluate("obj.field").then(function (value) { 
    console.log(value); 
}); 
+0

好的答案,我可以用它以某種方式動態?例如app.setDatepicker = function(path,date){var elm = element(by.model(path)); elm.evaluate(path +「=」+ date); }; – artdias90

+1

@ artdias90是的,當然,這些只是字符串,你可以連接它們 - 雖然看報價。 – alecxe