无法在下拉量角器e2e测试中选择选项

时间:2016-12-23 11:51:06

标签: javascript angularjs selenium testing protractor

我正在尝试使用量角器从下拉列表中选择角度e2e测试。
以下是选择选项的代码片段:

<div class="width70">
  <span title="" class="k-widget k-dropdown k-header width100 ng-scope ng-dirty ng-valid-parse ng-touched ng-invalid ng-invalid-required k-invalid" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="true" tabindex="0" aria-owns="" aria-disabled="false" aria-readonly="false" aria-busy="false" style="" aria-activedescendant="9e8e661a-e100-4c17-bceb-3de8ac876316">
    <span unselectable="on" class="k-dropdown-wrap k-state-default"><span unselectable="on" class="k-input ng-scope">Select Customer</span><span unselectable="on" class="k-select"><span unselectable="on" class="k-icon k-i-arrow-s">select</span></span></span>
    <select kendo-drop-down-list="" required="" name="customer" ng-model="arrayView.selectedCustomer" k-options="arrayView.customerList" k-rebind="arrayView.customerList" validationmessage="Select Customer" class="width100 ng-scope ng-dirty ng-valid-parse ng-touched ng-invalid ng-invalid-required k-invalid" data-role="dropdownlist" style="display: none;" aria-invalid="true">
        <option value="" selected="selected">Select Customer</option>
        <option value="615">option A</option>
        <option value="139">option B</option>
        <option value="1476">option C</option>
        <option value="570">option D</option>......`


我尝试了下一页中提及的几乎所有方法How to select option in drop down protractorjs e2e tests
他们似乎都没有为我工作。
我甚至找不到'select'('option'的父级标签)。
但我能成功点击div.span.span元素。

此外,当我点击下拉菜单时,我会看到一个搜索框以及所有选项。我正在附上相同的图片enter image description here 请帮我。我尝试了几种方法似乎没有任何作用。

1 个答案:

答案 0 :(得分:1)

var selectOptionFromDrpdwn = function (ngModelLocator, option) {     
  //arguments are strings
  element(by.model(ngModelLocator))
    .element(by.cssContainingText('option', option))
    .click();
}

<强>解释

上面有两个参数:locator和要选择的选项的值。定位器可以是任何东西,但在这里我使用的是ng-model,如果你正在使用其他东西,你必须相应地改变定位器功能。

在找到的元素内部,我找到了使用[cssContainingText locator] [1]单击的选项。唯一的缺点是选项值要完全输入,它不能取部分值名称。否则,您可以使用选项编号逻辑并相应地传递一个数字,如下所示:

element(by.model(ngModelLocator)).all(by.tagName('option').get(optionNumber).click();