我需要从下拉菜单中选择一个元素。

例如:

<select id="fruits01" class="select" name="fruits">
  <option value="0">Choose your fruits:</option>
  <option value="1">Banana</option>
  <option value="2">Mango</option>
</select>

1)首先我得点击它。我是这样做的:

inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()

2)之后,我必须选择好的元素,让我们说芒果。

我尝试用inputElementFruits.send_keys(…)来做,但它不起作用。


当前回答

使用selenium.webdriver.support.ui.的最佳方式是使用下拉选择选择要工作的类,但有时由于设计问题或HTML的其他问题,它不能像预期的那样工作。

在这种情况下,您也可以使用execute_script()作为替代解决方案,如下所示

option_visible_text = "Banana"
select = driver.find_element_by_id("fruits01")

#now use this to select option from dropdown by visible text 
driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", select, option_visible_text);

其他回答

它与选项值工作:

from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()

我希望这段代码对您有所帮助。

from selenium.webdriver.support.ui import Select

带有id的下拉元素

ddelement= Select(driver.find_element_by_id('id_of_element'))

使用xpath的下拉元素

ddelement= Select(driver.find_element_by_xpath('xpath_of_element'))

下拉元素与CSS选择器

ddelement= Select(driver.find_element_by_css_selector('css_selector_of_element'))

从下拉菜单中选择“Banana”

使用下拉索引

ddelement.select_by_index (1)

使用下拉列表的值

ddelement.select_by_value (' 1 ')

您可以使用匹配下拉菜单中显示的文本。

ddelement.select_by_visible_text(香蕉)

首先你需要导入Select类,然后你需要创建Select类的实例。 创建Select类的实例后,可以在该实例上执行选择方法,从下拉列表中选择选项。 下面是代码

from selenium.webdriver.support.select import Select

select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(0)

列表项

公共类ListBoxMultiple {

public static void main(String[] args) throws InterruptedException {
    // TODO Auto-generated method stub
    System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.get("file:///C:/Users/Amitabh/Desktop/hotel2.html");//open the website
    driver.manage().window().maximize();


    WebElement hotel = driver.findElement(By.id("maarya"));//get the element

    Select sel=new Select(hotel);//for handling list box
    //isMultiple
    if(sel.isMultiple()){
        System.out.println("it is multi select list");
    }
    else{
        System.out.println("it is single select list");
    }
    //select option
    sel.selectByIndex(1);// you can select by index values
    sel.selectByValue("p");//you can select by value
    sel.selectByVisibleText("Fish");// you can also select by visible text of the options
    //deselect option but this is possible only in case of multiple lists
    Thread.sleep(1000);
    sel.deselectByIndex(1);
    sel.deselectAll();

    //getOptions
    List<WebElement> options = sel.getOptions();

    int count=options.size();
    System.out.println("Total options: "+count);

    for(WebElement opt:options){ // getting text of every elements
        String text=opt.getText();
        System.out.println(text);
        }

    //select all options
    for(int i=0;i<count;i++){
        sel.selectByIndex(i);
        Thread.sleep(1000);
    }

    driver.quit();

}

}

在看了很多类似这篇文章之后,我设法想出了一个解决方案,让我可以在下拉列表中选择一个项目。我尝试了.send_keys,单击()和选择在各种方式没有成功。最后,在单击下拉列表中的项目之前,向下拉列表发送了3次click()命令。

dropMenu = browser.find_element_by_id('cmbDeviceType')
dropMenu.click()
dropMenu.click()
dropMenu.click()

deviceType = browser.find_element_by_id('cmbDeviceType_DDD_L_LBI16T0')
deviceType.click()

绝对不是很漂亮,但是很好用。

希望这能帮助到一些人。这是在Firefox 88.0.1上使用Python3.7.7完成的。