角度量角器e2e测试和选择值?

时间:2014-04-24 13:44:37

标签: angularjs protractor angularjs-e2e

我在获取当前选择的select元素值时遇到问题。在某些情况下,我可以使用:

element(by.css('#some-select')).$('[selected]').getText();

它运作得很好。但是我发现它的工作原理只是因为选项元素上存在选定的属性。如果我通过以这种方式设置选择值来选择javascript选项,则无法通过所选属性获取元素。

获取所选选项或其文字的正确方法是什么,因为我无法在任何地方找到答案。

谢谢。

2 个答案:

答案 0 :(得分:4)

好的,现在我同时感到愚蠢和愤怒。

事实证明,有一种简单的方法可以通过简单地调用:

来获得所选的选项
element(by.selectedOption('model-name'));

文档here

我觉得这是一种错误的方法,因为我没有重复使用已定义的元素定位器缓存(select元素),而是需要使用新的定位器“selectedOption”。这感觉很糟糕,因为我想简单地称之为element(by.css('#some-select')).getSelected();

但也许有一种我无法找到的方式?

答案 1 :(得分:0)

所以我碰到了这个,我找不到任何我真正喜欢的答案..

我的回答

首先,我建议您通过添加ng-options语句来更改track by

例如:

<select ng-options="l.id as ('filters.languages.' + l.id | translate) for l in limitedLanguages track by l.id" ng-model="filterLanguage">
</select>

这将在选项元素上添加id,而不是获取

<select ng-options="l.id as ('filters.languages.' + l.id | translate) for l in languages" ng-model="filterLanguage" class="ng-pristine ng-valid ng-touched">
    <option value="0">All</option>
    <option value="1" selected="selected">English</option>
    <option value="2">Hebrew</option>
    <option value="3">Russian</option>
    <option value="4">Arabic</option>
    <option value="5">Other</option>
</select>

你得到了

<select ng-options="l.id as ('filters.languages.' + l.id | translate) for l in languages track by l.id" ng-model="filterLanguage" class="ng-valid ng-dirty ng-valid-parse ng-touched">
    <option value="all" selected="selected">All</option>
    <option value="english">English</option>
    <option value="hebrew">Hebrew</option>
    <option value="russian">Russian</option>
    <option value="arabic">Arabic</option>
    <option value="other">Other</option>
</select>

请注意,如果没有track by,则值只是索引(0,1,..),并且跟踪值的值更具可读性/有意义(all,english,...)

然后您可以在值上使用getAttribute来获取其他答案中提到的值。