量角器 - 无法从下拉列表中选择项目

时间:2016-12-05 13:11:12

标签: protractor

我正在尝试使用代码从下拉列表中选择项目:

var assettype= element(by.model("templateIdTracker"));

if (assettype.isDisplayed()) {
    assettype.click();  
}
browser.sleep(1000);

element(by.cssContainingText('option', 'A')).click();

我可以点击下拉菜单,但在尝试选择项目时,会抛出错误:

  

"失败:元素不可见:元素当前不可见,可能   不被操纵"

这是网页代码。请建议。

<div class="k-list-container k-popup k-group k-reset k-state-border-up" data-role="popup" style="position: absolute; font-size: 14px; font-family: "Open Sans Light","Helvetica Neue",Helvetica,Arial,sans-serif; font-stretch: normal; font-style: normal; font-weight: 400; line-height: 20px; width: 243.5px; height: auto; display: block; transform: translateY(0px);">
  <div class="k-list-optionlabel ng-scope"/>
    <div class="k-group-header" style="display:none"/>
      <div class="k-list-scroller" unselectable="on" style="height: auto;">
        <ul class="k-list k-reset" unselectable="on" tabindex="-1"                     aria-hidden="false" aria-live="off" data-role="staticlist" role="listbox">
          <li class="k-item ng-scope k-state-hover" data-offset-index="0" unselectable="on" role="option" tabindex="-1">A</li>
          <li id="1ebaaa3b-8f44-4873-b478-fea6fd498b83" class="k-item ng-scope k-state-selected k-state-focused" data-offset-index="1" unselectable="on" role="option" tabindex="-1">B</li>
          <li class="k-item ng-scope" data-offset-index="2" unselectable="on" role="option" tabindex="-1">C</li>
          <li class="k-item ng-scope" data-offset-index="3" unselectable="on" role="option" tabindex="-1">D</li>
          <li class="k-item ng-scope" data-offset-index="4" unselectable="on" role="option" tabindex="-1">E</li>
          <li class="k-item ng-scope" data-offset-index="5" unselectable="on" role="option" tabindex="-1">F</li>
          <li class="k-item ng-scope" data-offset-index="6" unselectable="on" role="option" tabindex="-1">G</li>
        </ul>
      </div>
    </div>
  </div>
</div>

3 个答案:

答案 0 :(得分:0)

您可以实现帮助方法以等待此元素可见。

Helpers.expectVisible = function (elementLocator, elementDescription) {
    var message = null;
    if (elementDescription) {
        message = elementDescription + ' was not visible';
    }
    return browser.wait(EC.visibilityOf(elementLocator), WAIT_TIMEOUT, message);
};

答案 1 :(得分:0)

问题是您的浏览器无法看到该元素,它可能位于屏幕底部。 您可以对您看不到的任何元素使用相同的解决方案。

在此处查看我的答案https://stackoverflow.com/a/39074330/1431062

答案 2 :(得分:0)

谢谢大家! 它只是通过使用&#39; li&#39;而不是&#39;选项&#39;

元素(by.cssContainingText(&#39; li&#39;,&#39; A&#39;))。click();

而不是元素(by.cssContainingText(&#39;选项&#39;,&#39; A&#39;))。click();

    assettype= element(by.model("templateIdTracker"));
    assettype.click();
    browser.sleep(1000);

    element(by.cssContainingText('li', 'A')).click();
    browser.sleep(2000);