6

分度器で ui-select をテストしようとしています。この ui-select には、国のリストがあります。私のhtmlは次のようになります:

<ui-select ng-model="datiAnagrafici.countryOfBirth" name="countryOfBirth" theme="bootstrap" reset-search-input="true" append-to-body="true" required blur>
                <ui-select-match placeholder="paese di nascita">{{$select.selected.name}}</ui-select-match>
                <ui-select-choices repeat="country.code as country in countries | filter: {name:$select.search}">
                    <span ng-bind-html="country.name"></span>
                </ui-select-choices>
</ui-select>

私のページオブジェクトは次のようになります:

this.country = element(by.model('datiAnagrafici.countryOfBirth'));
this.fillForm = function(){
   this.country.sendKeys('IT');
}

私の仕様ファイルには次のものがあります。

it('should fill the form', function() {
  form.fillForm();
})

しかし、テストを実行すると、送信されたデータが ng-model に入力されません。ヒントはありますか?ありがとう

4

5 に答える 5

7

ここで解決策を見つけました

this.country = element(by.model('datiAnagrafici.countryOfBirth'));
this.selectCountry = this.country.element(by.css('.ui-select-search'));

次に、フィルフォームメソッドでは、alecxeが言ったのとほぼ同じです:

this.country.click();
this.selectCountry.sendKeys('Italy');
于 2015-06-26T10:08:15.627 に答える
2

次のような関数で ui-select をラップすることもできます。

    function UiSelect(elem) {
        var self = this;

        self._input = elem;
        self._selectInput = self._input.element(by.css('.ui-select-search'));
        self._choices = self._input.all(by.css('.ui-select-choices .ui-select-choices-row-inner'));

        self.sendKeys = function(val) {
            self._input.click();
            self._selectInput.clear();
            return self._selectInput.sendKeys(val);
        };

        self.pickChoice = function(index){
            browser.waitForAngular();
            expect(self._choices.count()).not.toBeLessThan(index + 1);
            return self._choices.get(index).click();
        };
    };

これで、任意の ui-select 入力を簡単に操作できるようになりました:

var input = new UiSelect(element(by.model('datiAnagrafici.countryOfBirth')));
input.sendKeys('IT'); 
input.pickChoice(0); // Pick choice with index 0 when searching for 'IT'. 
于 2016-03-14T23:08:58.617 に答える
0

ui-select 要素をクリックして入力を入力した後、これを追加して結果を選択する必要があります。

element.all(by.css('.ui-select-choices-row-inner span')).first().click();
于 2016-10-07T11:50:40.233 に答える
0

私は sniper87 の答えを得ることができませんでしたが、css をいじってみると、これは正しく機能しました。

element(by.css('div.ui-select-container div.ui-select-match span.ui-select-input')).click();
element(by.css('div.ui-select-container .ui-select-search')).sendKeys('foo');;
于 2015-09-29T10:45:12.817 に答える
0

キーを送信する前に、次の要素をクリックしui-selectます。

this.country.click();
this.country.sendKeys('IT');
于 2015-06-25T16:31:36.863 に答える