2014-02-24 49 views
1

我有一個帶有各種選項的選擇框的頁面,而且我正在編寫一個驗收測試以檢查頁面第一次加載時是否選擇了正確的選項。我希望使用WebdriverJs來做到這一點,但由於某種原因,getText()總是返回一個空字符串。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> 

我然後試圖找出當前選擇的選項的值如下:

browser.findElement(webdriver.By.css('.nav-menu option[selected="selected"]')).getText().then(function(selectedText){ 
    console.log("selectedText: " + selectedText); 
    next(); 
}); 

然而,這也是註銷一個空字符串。

使用Chrome開發人員工具調用JavaScript等價物返回「WORLDWIDE」 - 任何想法這有什麼問題?

回答

1

我不使用WebDriverJS,所以我不能證明我的理論,但我想這是因爲Selenium getText()只適用於可見元素?

  • 嘗試使用getAttribute("textContent")

  • 嘗試點擊.nav-menu第一,然後用getText()

+0

啊,是的,'getAttribute('textContent')'解決方案的工作原理,非常感謝。 –

+0

我想知道getAttribute(「textContent」)是什麼以及我們爲什麼包含在條件中? –

0

我發現選擇通過CSS +所選屬性 '選項' 元素是不可靠的。

對我來說,以下工作:

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

嗯,好了有些玩家表示CSS選擇工作正常,但getText()方法不起作用。

就目前而言,我已經得到了它的工作使用innerHTML屬性:

browser.findElement(webdriver.By.css('.nav-menu option[selected="selected"]')).getAttribute('innerHTML').then(function(selectedText){ 
    console.log("selectedText: " + selectedText); 
    next(); 
}); 

所以CSS選擇器看起來可靠,但我也將嘗試從user1177636的textContent建議。

+0

我沒有建議'innerHTML'的原因是因爲它可以得到你所有的東西,就像

裏的

p裏面的其他元素一樣,'textContent'只會讓你'p inside'。 –

+0

同意 - 'textContent'是完美的,並且按預期工作,沒有像innerHTML這樣的潛在副作用。非常感謝! –