Javascript getText()不处理“从中选择”下拉列表
我有一个带有选择框的页面,其中包含各种选项,我正在编写一个验收测试,以检查当页面首次加载时,是否选择了正确的选项。我希望使用WebdriverJs实现这一点,但出于某种原因,Javascript getText()不处理“从中选择”下拉列表,javascript,selenium,selenium-webdriver,Javascript,Selenium,Selenium Webdriver,我有一个带有选择框的页面,其中包含各种选项,我正在编写一个验收测试,以检查当页面首次加载时,是否选择了正确的选项。我希望使用WebdriverJs实现这一点,但出于某种原因,getText()总是返回一个空字符串 加载时,我希望页面如下所示: <select class='nav-menu'> <option value="global" selected="selected">WORLDWIDE</option> <option value="
getText()
总是返回一个空字符串
加载时,我希望页面如下所示:
<select class='nav-menu'>
<option value="global" selected="selected">WORLDWIDE</option>
<option value="us">USA</option>
<option value="uk">UNITED KINGDOM</option>
<option value="au">AUSTRALIA</option>
<option value="ca">CANADA</option>
<option value="de">GERMANY</option>
<option value="es">SPAIN</option>
<option value="fr">FRANCE</option>
</select>
但是,这也是注销一个空字符串
使用Chrome开发者工具调用JavaScript等价物会返回“全球范围”——有什么想法吗?我不使用WebDriverJ,所以我无法证明我的理论,但我猜这是因为Selenium
getText()
只对可见元素有效
- 尝试使用
getAttribute(“textContent”)
- 首先尝试单击
,然后使用.nav菜单
getText()
var By = require('selenium-webdriver').By;
var dd = driver.findElement(By.id('myId'));
dd.findElements(By.tagName('option')).then(function (options) {
options.forEach(function(option) {
option.isSelected().then(function(selected) {
if (selected) {
option.getText().then(function(text) {
console.log(text);
done(); //mocha async callback
});
}
});
});
});
您可以将其包装成一个函数,类似于:
var wd = require('selenium-webdriver'),
By = wd.By;
function getFirstSelected(selectList) {
var d = wd.promise.defer();
selectList.findElements(wd.By.tagName('option')).then(function (options) {
options.forEach(function(option) {
option.isSelected().then(function(isSelected) {
if (isSelected) {
d.fulfill(option);
}
});
});
});
return d.promise;
}
然后像这样使用它:
var sl = driver.findElement(wd.By.id('myId'));
getFirstSelected(sl).then(function(option) {
option.getText().then(function(text) {
console.log(text);
done();
});
});
嗯,一些游戏表明CSS select工作正常,但是getText()方法不工作 目前,我已使用
innerHTML
属性使其正常工作:
browser.findElement(webdriver.By.css('.nav-menu option[selected="selected"]')).getAttribute('innerHTML').then(function(selectedText){
console.log("selectedText: " + selectedText);
next();
});
所以CSS选择器看起来很可靠,但我也会尝试用户1177636的
textContent
建议。啊,是的,`getAttribute('textContent')解决方案很有效,非常感谢。我想知道getAttribute(“textContent”)是什么为什么我们要包含在条件中?我没有建议innerHTML
的原因是,它可以把所有东西都放在里面,就像p里面的其他元素一样,textContent
只会把你放在p里面。同意-textContent
是完美的,并且工作正常,没有潜在的副作用,如innerHTML
。非常感谢!
browser.findElement(webdriver.By.css('.nav-menu option[selected="selected"]')).getAttribute('innerHTML').then(function(selectedText){
console.log("selectedText: " + selectedText);
next();
});