Как выбрать выпадающее значение в selenium webdriver с помощью node.js

У меня есть следующая структура HTML:

<button data-toggle="dropdown" type="button" data-id="strategic_reseller_country" title="United States"><code>
<div style="max-height: 245.6px; overflow: hidden; min-height: 40px;">
<ul role="menu" style="max-height: 243.6px; overflow-y: auto; min-height: 38px;">
<i>
<li rel="1">
<a style="" tabindex="0">
<span>Andorra</span>
</a></li><i>
<li rel="2">
<a style="" tabindex="0">
<span>United Arab Emirates</span>
</a></li><i>
<li rel="3">
<a style="" tabindex="0">
<span>Afghanistan</span>
</a></li><i>
<li rel="9">
<a style="" tabindex="0">
<span>Netherlands Antilles</span>
</a></li><i> 
</i></i></i></i></i></ul></div></code><i><i><i>
<p>так как я могу получить элемент из списка.</p>
<p>Я новичок в Node.Js(JavaScript), поэтому я не знаю, как его достичь в Node.Js, но это может быть достигнуто в java следующим образом:</p>
<p>Выберите dropdown = new Выберите (driver.findElement(By.class( "выпадающее меню внутреннего selectpicker" )));
dropdown.selectByVisibleText( "Андорра" );</p></i></i></i></button>
4 ответа

Я использовал бы 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()


Просто нажмите нужную опцию.

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

Обратите внимание, что я изменил ваш "By" на селектор css. Я ленив и люблю просто вставлять эту опцию из инструментов разработчика и выбирать Копировать CSS-путь (хром) или Копировать уникальный селектор (firefox).


Для тех, кто застрял в этом, понимает, как я это сделал для варианта:

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

В Selenium для 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() для опции, она должна равняться значению = ''

В вашем случае просто захватите родительский элемент, а затем sendKeys() для дочернего элемента.


Вы можете создать функцию, которая выбирает желаемое значение

как это...

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

licensed under cc by-sa 3.0 with attribution.