selenium之下拉框选择Select

发布时间 2023-09-06 18:11:31作者: 手可摘星辰/*
  • Select API 知识点
    1. select_by_index() 根据索引选择,0是第一个元素
      select_by_value() 根据value属性的值选择
      select_by_visible_text() 根据可见文本选择;不要写前后的空格

    2. deselect_by_index(index) 取消选择,0是第一个元素
      deselect_by_value(value) 根据value属性的值取消选择
      deselect_by_visible_text(text) 根据可见文本取消选择;不要写前后的空格
      deselect_all() 全部取消选择

  • 案例
    • select.html
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
         <div id="div1">
              <!--  select 下拉框      -->
              <select name="sex" id="gender">
                  <option value=" male"> male</option>
                  <option value="female">female</option>
                  <option value="tailand">tailand</option>
              </select>
              <!--  select标签多选,通过multiple属性      -->
              <select name= “education” id=”education” multiple=”multiple”>
                  <option value=”1”>高中</option>
                  <option value=”2”>大学</option>
                  <option value=”3”>博士</option>
                  <option value=”4”>硕士</option>
              </select>
          </div>
      </body>
      </html>
    • ele_select.py
      # -*- coding: UTF-8 -*-
      import os
      from time import sleep
      
      from selenium.webdriver.support.select import Select
      from selenium import webdriver
      
      driver = webdriver.Chrome('../chromedriver.exe')
      driver.get(os.path.abspath('select.html'))
      
      test_flag = 3
      if test_flag == 1:
          driver.find_element('css selector', '#gender>option:nth-child(2)').click()  # 不用API,可以直接点
      if test_flag == 2:
          ele_select = driver.find_element('css selector', '#gender')
          Select(ele_select).select_by_index(1)  # female
          sleep(2)
          Select(ele_select).select_by_value('tailand')  # tailand
          sleep(2)
          # xpath = ".//option[normalize-space(.) = %s]" % self._escape_string(text) 源码中normalize-space去除首尾空格
          Select(ele_select).select_by_visible_text('male')
      if test_flag == 3:
          ele_select = driver.find_element('css selector', '#”education”')
          Select(ele_select).select_by_index(0)
          sleep(2)
          Select(ele_select).select_by_index(1)
          sleep(2)
          Select(ele_select).deselect_by_index(0)
          Select(ele_select).deselect_all()
          sleep(2)
          # Select(ele_select).deselect_by_value('')
          # sleep(2)
          # Select(ele_select).deselect_by_visible_text('')

      注意:根据可见文本选择时,若元素中含有空格不需要写,因为在源码中normalize-space已去除首尾空格