量角器:从弹出值中选择元素

时间:2019-04-12 17:06:02

标签: javascript selenium protractor

我们有一些文本框,需要从弹出列表中选择值。元素和弹出窗口是这样的:

PopUp and Element

相关的html代码如下:

<div _ngcontent-c6="" class="col px-0">
  <input _ngcontent-c6="" aria-multiline="false" autocapitalize="off" 
    autocorrect="off" class="form-control ng-dirty ng-valid open ng-touched"
    formcontrolname="ESYSITENAME" id="esySiteName" name="" placeholder="" 
    role="combobox" type="text" autocomplete="off" aria-autocomplete="list"
    aria-expanded="true" aria-activedescendant="ngb-typeahead-2-0" 
    aria-owns="ngb-typeahead-2">

  <ngb-typeahead-window class="dropdown-menu show ng-star-inserted" 
    role="listbox" id="ngb-typeahead-2" style="top: 39px; left: 0px;">

    <button class="dropdown-item ng-star-inserted active" role="option"
       type="button" id="ngb-typeahead-2-0">

      <ngb-highlight _ngcontent-c6="" _nghost-c25="" class="ng-star-inserted">
          <span _ngcontent-c25="" class="ngb-highlight ng-star-inserted">
              Bull Run Elementary School
          </span>
      </ngb-highlight>
    </button>

  </ngb-typeahead-window>

</div>

我尝试使用不同的策略来选择Popup元素,例如:

let EsyNamePopup = $('#ngb-typeahead-2-0 > ngb-highlight > span');
await helpers.waitForElementVisibility(EsyNamePopup);
await helpers.clickWhenClickable(EsyNamePopup);

// or following way:
let EsyNamePopup = element(by.cssContainingText('span', 'Bull Run Elementary School,));
await EsyNamePopup.click();

他们都不工作,但是收到以下错误消息:

  

NoSuchElementError:使用定位器找不到任何元素:By(css选择器,#ngb-typeahead-2-0> ngb-highlight> span)

是否有更好的策略来选择这些元素?

2 个答案:

答案 0 :(得分:0)

我认为您可以尝试长时间睡眠,然后再单击弹出选项。如果长时间睡眠可以解决您的问题,则说明您的等待功能Index出现问题,或者您没有给予足够的等待时间。

var provider = new Firebase.auth.GoogleAuthProvider();
  provider.setCustomParameters({
    prompt: 'select_account'
  });

答案 1 :(得分:-1)

您可以按照此处的步骤设置断点并调试代码。 http://www.protractortest.org/#/debugging

可能想验证sendkey是否将启动typeahead弹出窗口,或者是否需要对此元素进行聚焦。