我正在尝试使用量角器从下拉列表中为angular e2e测试选择一个选项。
以下是select选项的代码片段:
<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’驱动程序信息: driver.version:未知
我也尝试过:
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:元素当前不可见,因此可能无法与命令持续时间或超时进行交互: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功能{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}
有没有人可以帮我解决这个问题,或者告诉我我可能做错了什么。
发布于 2013-12-01 11:05:11
我也遇到过类似的问题,最后我写了一个帮助函数来选择下拉值。
我最终决定可以通过选项号进行选择,因此编写了一个方法,该方法接受一个元素和optionNumber,并选择该optionNumber。如果optionNumber为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/
发布于 2014-06-17 16:47:50
对我来说就像一个护身符
element(by.cssContainingText('option', 'BeaverBox Testing')).click();
发布于 2015-04-03 08:17:42
是一种优雅的方法,将涉及到创建类似于其他selenium语言绑定提供的开箱即用的抽象(例如,Python或Java中的Select
类)。
让我们做一个方便的包装器,并隐藏其中的实现细节:
var SelectWrapper = function(selector) {
this.webElement = element(selector);
};
SelectWrapper.prototype.getOptions = function() {
return this.webElement.all(by.tagName('option'));
};
SelectWrapper.prototype.getSelectedOptions = function() {
return this.webElement.all(by.css('option[selected="selected"]'));
};
SelectWrapper.prototype.selectByValue = function(value) {
return this.webElement.all(by.css('option[value="' + value + '"]')).click();
};
SelectWrapper.prototype.selectByPartialText = function(text) {
return this.webElement.all(by.cssContainingText('option', text)).click();
};
SelectWrapper.prototype.selectByText = function(text) {
return this.webElement.all(by.xpath('option[.="' + text + '"]')).click();
};
module.exports = SelectWrapper;
使用示例(注意它的可读性和易用性):
var SelectWrapper = require('select-wrapper');
var mySelect = new SelectWrapper(by.id('locregion'));
# select an option by value
mySelect.selectByValue('4');
# select by visible text
mySelect.selectByText('BoxLox');
取自以下主题的解决方案:Select -> option abstraction。
仅供参考,创建了一个功能请求:Select -> option abstraction。
https://stackoverflow.com/questions/19599450
复制相似问题