Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getText()不处理“从中选择”下拉列表_Javascript_Selenium_Selenium Webdriver - Fatal编程技术网

Javascript getText()不处理“从中选择”下拉列表

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="

我有一个带有选择框的页面,其中包含各种选项,我正在编写一个验收测试,以检查当页面首次加载时,是否选择了正确的选项。我希望使用WebdriverJs实现这一点,但出于某种原因,
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()


我发现通过css+选定属性选择“option”元素是不可靠的

以下是我的作品:

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();
});