2014-09-25 79 views
3

我有以下HTML結構:如何選擇硒下拉值的webdriver如何使用Node.js

<button class="dropdown-toggle selectpicker btn btn-primary" data-toggle="dropdown" type="button" data-id="strategic_reseller_country" title="United States"> 
<div class="dropdown-menu open" style="max-height: 245.6px; overflow: hidden; min-height: 40px;"> 
<ul class="dropdown-menu inner selectpicker" role="menu" style="max-height: 243.6px; overflow-y: auto; min-height: 38px;"> 
<li class="" rel="0"> 
<a class="" style="" tabindex="0"> 
<span class="text"/> 
<i class="glyphicon glyphicon-ok icon-ok check-mark"/> 
</a> 
</li> 
<li rel="1"> 
<a class="" style="" tabindex="0"> 
<span class="text">Andorra</span> 
<i class="glyphicon glyphicon-ok icon-ok check-mark"/> 
</a> 
</li> 
<li rel="2"> 
<a class="" style="" tabindex="0"> 
<span class="text">United Arab Emirates</span> 
<i class="glyphicon glyphicon-ok icon-ok check-mark"/> 
</a> 
</li> 
<li rel="3"> 
<a class="" style="" tabindex="0"> 
<span class="text">Afghanistan</span> 
<i class="glyphicon glyphicon-ok icon-ok check-mark"/> 
</a> 
</li> 
<li rel="4"> 
<li rel="5"> 
<li rel="6"> 
<li rel="7"> 
<li rel="8"> 
<li rel="9"> 
<a class="" style="" tabindex="0"> 
<span class="text">Netherlands Antilles</span> 
<i class="glyphicon glyphicon-ok icon-ok check-mark"/> 
</a> 
</li> 
</ul> 
</div> 

所以,我怎麼能得到從清單..項目

我是新來的節點。 Js(JavaScript)所以我不知道如何在node.Js中實現它,但它可以在java中實現如下:

Select dropdown = new Select(driver.findElement(By.class(「dropdown-menu內部selectpicker「))); dropdown.selectByVisibleText(「Andorra」);

+1

節點實際上並沒有任何方法來解析HTML,但你可以看看什麼像[Cheerio](https://www.npmjs.org/package/cheerio),並使用類似於jQuery語法的東西來獲得你想要的。 – adeneo 2014-09-25 15:01:27

回答

0

我會用Cheerio這個。

module.exports = { 
    "login": function (browser) { 
     var cheerio = require("cheerio") 

     browser 
      .url("http://www.wikipedia.org") 
      .waitForElementVisible('body', 1000) 
      .waitForElementVisible('select#searchLanguage', 1000) 
      .source(function(result) { // .source() dump the page source in the variable 
       $ = cheerio.load(result.value) 
       var num_languages = $('select#searchLanguage option').length 
       console.log('Wikipedia.org Languages: ' + num_languages); 
      }) 
      .end(); 
    } 
}; 

,或者乾脆利用的.execute()命令

+0

走出軌道!回答 – 2015-06-11 11:06:38

+0

它對我來說很好.. – 2015-06-12 01:18:44

+0

你作爲'瀏覽器'傳遞的功能是什麼? – 2016-11-09 23:56:03

0

對於任何人停留在此,繼承人如何我做到了一個選項:

<select id='mySelection'> 
    <option value='0'>Hello</option> 
    <option value='1'>Everybody</option> 
    <option value='2'>Got</option> 
    <option value='3'>It</option> 
</select> 

在硒的NodeJS,你會搶「它「:

var webdriver = require('selenium-webdriver'); 

var driver = new webdriver.Builder(). 
    withCapabilities(webdriver.Capabilities.chrome()). 
    build(); 


driver.findElement(webdriver.By.id('mySelection')).sendKeys('3'); 

當您.sendKeys()的選項必須等於value =''

在你的情況下,只需抓住父元素,然後sendKeys()爲子元素。

+0

我很確定這不起作用。 – Offlein 2015-06-07 21:25:17

+0

是的,這對我不起作用,sendKeys()基本上是發送值,但父元素不是字段或實際接受值的東西。 – gware 2017-03-09 16:11:19

6

只需單擊所需的選項。

driver.findElement(webdriver.By.css('#mySelection > option:nth-child(4)')) 
    .click(); 

請注意,我已將'By'更改爲css選擇器。我很懶,只想深入研究開發人員工具的選項,然後選擇複製CSS路徑(chrome)或複製唯一選擇器(firefox)。

0

您可以創建一個選擇你的願望

這樣的值的函數...

driver.wait(
    until.elementLocated(By.id("continents")), 20000 
).then(element => { 
    selectByVisibleText(element, "Africa") 
}); 

function selectByVisibleText(select, textDesired) { 
    select.findElements(By.tagName('option')) 
    .then(options => { 
     options.map(option => { 
      option.getText().then(text => { 
       if (text == textDesired) 
        option.click(); 
      }); 
     }); 
    }); 
} 
相關問題