如何在下拉量程式 js e2e 测试中选择选项

我正在尝试从下拉列表中选择一个选项,用于使用量角器进行角度e2e测试。

下面是选择选项的代码片段:

<select id="locregion" class="create_select ng-pristine ng-invalid ng-invalid-required" required="" ng-disabled="organization.id !== undefined" ng-options="o.id as o.name for o in organizations" ng-model="organization.parent_id">
    <option value="?" selected="selected"></option>
    <option value="0">Ranjans Mobile Testing</option>
    <option value="1">BeaverBox Testing</option>
    <option value="2">BadgerBox</option>
    <option value="3">CritterCase</option>
    <option value="4">BoxLox</option>
    <option value="5">BooBoBum</option>
</select>

我试过:

ptor.findElement(protractor.By.css('select option:1')).click();

这给我带来了以下错误:

指定了无效或非法字符串 内部版本信息: 版本: “2.35.0”, 修订版本: “c916b9d”, 时间: “2013-08-12 15:42:01” 系统信息: os.name: “Mac OS X”, os.arch: “x86_64”, os.version: “10.9”, java.version: '1.6.0_65' 驱动程序信息: 驱动程序.版本: 未知

我也试过:

ptor.findElement(protractor.By.xpath('/html/body/div[2]/div/div[4]/div/div/div/div[3]/ng-include/div/div[2]/div/div/organization-form/form/div[2]/select/option[3]')).click();

这给我带来了以下错误:

ElementNotVisibleError: Element 当前不可见,因此可能无法与命令持续时间或超时进行交互: 9 毫秒 内部版本: 版本: '2.35.0', 修订版: 'c916b9d', 时间: '2013-08-12 15:42:01' 系统信息: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9', java.version: '1.6.0_65' 会话 ID: bdeb8088-d8ad-0f49-aad9-82201c45c63f 驱动程序信息: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=MAC, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=24.0, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=false, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]

任何人都可以帮助我解决这个问题,或者阐明我在这里可能做错了什么。


答案 1

对我来说,工作就像一个魅力

element(by.cssContainingText('option', 'BeaverBox Testing')).click();

答案 2

我遇到了类似的问题,最终编写了一个选择下拉列表值的帮助程序函数。

我最终决定按选项编号进行选择,因此编写了一个方法,该方法采用元素和选项Number,并选择该选项Number。如果“编号”选项为 null,则不选择任何内容(使下拉列表保持未选中状态)。

var selectDropdownbyNum = function ( element, optionNum ) {
  if (optionNum){
    var options = element.all(by.tagName('option'))   
      .then(function(options){
        options[optionNum].click();
      });
  }
};

如果您想要更多详细信息,我写了一篇博客文章,它还包括验证下拉列表中所选选项的文本:http://technpol.wordpress.com/2013/12/01/protractor-and-dropdowns-validation/