Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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
我是否可以使用selenium+;python_Python_Selenium_Selenium Webdriver_Multi Select_Drop Down Menu - Fatal编程技术网

我是否可以使用selenium+;python

我是否可以使用selenium+;python,python,selenium,selenium-webdriver,multi-select,drop-down-menu,Python,Selenium,Selenium Webdriver,Multi Select,Drop Down Menu,已测试的HTML: <select> <option value="html">html</option> <option value="css">css</option> <option value="JavaScript">JavaScript</option> <option value="php">php</option> </select&g

已测试的HTML:

<select>
    <option value="html">html</option>
    <option value="css">css</option>
    <option value="JavaScript">JavaScript</option>
    <option value="php">php</option>
</select>
然后尝试获取所有选定的选项

Select(lang).all_selected_options
我只能得到最后一个选项“php”,这意味着当我选择一个选项时,另一个选项将自动取消选择。
所有选定选项的含义是什么,
选项
非常有用。我不能取消选择任何选项,因为只选择了一个,报告了一个错误:

NotImplementedError: You may only deselect options of a multi-select

此下拉列表不支持多选,此类下拉列表将具有
multiple
属性

<select multiple="">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>
def __init__(self, webelement):
    self._el = webelement
    multi = self._el.get_attribute("multiple")
    self.is_multiple = multi and multi != "false"
您可以使用
选择
实例来访问它

Select(element).is_multiple
要获取所有下拉选项(无论是否选中),请使用
option
属性,这将以
WebElement
列表的形式返回所有选项

options = Select(element).options
for option in options:
    print option.text # html, css, ...

如果您想在python中使用selenium选择多个选项,您可以始终使用
ActionChains
来链接一系列操作,我们需要以下操作:

  • CTRL
  • 单击选项上的
  • 释放
    CTRL
  • 这是一个在python中使用ActionChains的好例子

    在python中列出要选择的选项列表,在列表中循环并使用
    xpath
    选择包含
    文本的选项,然后使用
    ActionChains
    使用上面定义的一系列操作选择选项

    # Text of options needed to select
    options = ['html','css','php']
    
    # Add path to your chrome drive
    browser = webdriver.Chrome(executable_path="EXECUTABLE_PATH_HERE")
    
    # Add url of website
    browser.get("WEBSITE_URL_HERE")
    
    for option in options:
      # Find option that contains text equal to option
      to_select = browser.find_element_by_xpath("//select/option[text()='"+option+"']")
    
      # Use ActionChains
      ActionChains(browser).key_down(Keys.CONTROL).click(to_select).key_up(Keys.CONTROL).perform()
    
    
    • ActionChains()
      获取在本例中为
      browser
      的驱动程序的引用
    • key\u down()
      按下传递给它的
      CONTROL
    • click()
      单击使用
      xpath
      选择的已传递选项
    • key\u up()
      release
      CONTROL
      key

    我希望这将对您有很大帮助。

    根据您共享的HTML:

    <select>
        <option value="html">html</option>
        <option value="css">css</option>
        <option value="JavaScript">JavaScript</option>
        <option value="php">php</option>
    </select>
    
  • 使用
    xpath

    select_technology = Select(driver.find_element_by_xpath(//select))
    for option in select_technology.options:
        print(option.text)  
    
  • 注意:您必须添加以下导入:

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    

  • 此下拉列表似乎不支持多选。您可以手动选择多个选项吗?当然不能。那么
    all\u selected\u options
    deselect\u
    方法都没有用?仅仅因为此下拉列表不支持多选,并不意味着所有下拉列表都不支持它。
    select
    类下既没有
    is\u multiple()
    也没有
    is\u multiple
    。我签入了selenium文档:@elf它不在文档中,但您可以在源代码中看到它。尝试使用它(不使用
    ()
    )。
    select_technology = Select(driver.find_element_by_xpath(//select))
    for option in select_technology.options:
        print(option.text)  
    
    from selenium import webdriver
    from selenium.webdriver.support.select import Select