选择框


请大家打开这个网址 http://f.python3.vip/webauto/test2.html

并且按F12,观察HTML的内容

常见的选择框包括: radio框、checkbox框、select框

radio框


点击这里,边看视频讲解,边学习以下内容

radio框选择选项,直接用WebElement的click方法,模拟用户点击就可以了。

比如, 我们要在下面的html中:

  • 先打印当前选中的老师名字
  • 再选择 小雷老师
<div id="s_radio">
  <input type="radio" name="teacher" value="小江老师">小江老师<br>
  <input type="radio" name="teacher" value="小雷老师">小雷老师<br>
  <input type="radio" name="teacher" value="小凯老师" checked="checked">小凯老师
</div>

对应的代码如下

# 获取当前选中的元素
element = wd.find_element_by_css_selector(
  '#s_radio input[checked=checked]')
print('当前选中的是: ' + element.get_attribute('value'))

# 点选 小雷老师
wd.find_element_by_css_selector(
  '#s_radio input[value="小雷老师"]').click()

checkbox框


点击这里,边看视频讲解,边学习以下内容

对checkbox进行选择,也是直接用 WebElement 的 click 方法,模拟用户点击选择。

需要注意的是,要选中checkbox的一个选项,必须 先获取当前该复选框的状态 ,如果该选项已经勾选了,就不能再点击。否则反而会取消选择。

比如, 我们要在下面的html中:选中 小雷老师

<div id="s_checkbox">
  <input type="checkbox" name="teacher" value="小江老师">小江老师<br>
  <input type="checkbox" name="teacher" value="小雷老师">小雷老师<br>
  <input type="checkbox" name="teacher" value="小凯老师" checked="checked">小凯老师
</div>

我们的思路可以是这样:

  • 先把 已经选中的选项全部点击一下,确保都是未选状态
  • 再点击 小雷老师

示例代码

# 先把 已经选中的选项全部点击一下
elements = wd.find_elements_by_css_selector(
  '#s_checkbox input[checked="checked"]')

for element in elements:
    element.click()

# 再点击 小雷老师
wd.find_element_by_css_selector(
  "#s_checkbox input[value='小雷老师']").click()

select框


点击这里,边看视频讲解,边学习以下内容

radio框及checkbox框都是input元素,只是里面的type不同而已。

select框 则是一个新的select标签,大家可以对照浏览器网页内容查看一下

对于Select 选择框, Selenium 专门提供了一个 Select类 进行操作。

Select类 提供了如下的方法

  • select_by_value

根据选项的 value属性值 ,选择元素。

比如,下面的HTML,

<option value="foo">Bar</option>

就可以根据 foo 这个值选择该选项,

s.select_by_value('foo')


  • select_by_index

根据选项的 次序 (从1开始),选择元素


  • select_by_visible_text

根据选项的 可见文本 ,选择元素。

比如,下面的HTML,

<option value="foo">Bar</option>

就可以根据 Bar 这个内容,选择该选项

s.select_by_visible_text('Bar')


  • deselect_by_value

根据选项的value属性值, 去除 选中元素


  • deselect_by_index

根据选项的次序,去除 选中元素


  • deselect_by_visible_text

根据选项的可见文本,去除 选中元素


  • deselect_all

去除 选中所有元素

Select单选框

对于 select单选框,操作比较简单:

不管原来选的是什么,直接用Select方法选择即可。

例如,选择示例里面的小雷老师,示例代码如下

# 导入Select类
from selenium.webdriver.support.ui import Select

# 创建Select对象
select = Select(wd.find_element_by_id("ss_single"))

# 通过 Select 对象选中小雷老师
select.select_by_visible_text("小雷老师")

Select多选框

对于select多选框,要选中某几个选项,要注意去掉原来已经选中的选项。

例如,我们选择示例多选框中的 小雷老师 和 小凯老师

可以用select类 的deselect_all方法,清除所有 已经选中 的选项。

然后再通过 select_by_visible_text方法 选择 小雷老师 和 小凯老师。

示例代码如下:

# 导入Select类
from selenium.webdriver.support.ui import Select

# 创建Select对象
select = Select(wd.find_element_by_id("ss_multi"))

# 清除所有 已经选中 的选项
select.deselect_all()

# 选择小雷老师 和 小凯老师
select.select_by_visible_text("小雷老师")
select.select_by_visible_text("小凯老师")


扫码分享给朋友,一起学更有动力哦




课后练习

题目1

点击这里下载 白月SMS系统的测试用例文档,白月SMS系统的 安装步骤 可以参考 课程1的课后练习

完成用例 UI-0107 的自动化



参考答案

from selenium import webdriver
import time
# 导入Select类
from selenium.webdriver.support.ui import Select


#  添加 客户 或者 药品
#  由于 代码逻辑相同,封装在函数中
def addCustomerOrMedicion(field1,field2,field3):
    # 点击添加按钮
    wd.find_element_by_class_name('glyphicon-plus').click()

    # form-contorl 对应3个输入框
    inputs = wd.find_elements_by_css_selector('.add-one-area .form-control')

    # 输入 药品名称
    inputs[0].send_keys(field1)
    # 输入 编号
    inputs[1].send_keys(field2)
    # 输入 描述
    inputs[2].send_keys(field3)

    # 第1个 btn-xs 就是创建按钮, 点击创建按钮
    wd.find_element_by_css_selector('.add-one-area .btn-xs').click()

    # 等待界面刷新稳定
    time.sleep(1)


wd = webdriver.Chrome()
wd.implicitly_wait(5)

wd.get('http://127.0.0.1/mgr/sign.html')

# 根据 ID 选择元素,并且输入字符串
wd.find_element_by_id('username').send_keys('byhy')
wd.find_element_by_id('password').send_keys('88888888')

# 点击登录
wd.find_element_by_tag_name('button').click()



# ****   添加 客户 和 药品 *****

# 点击药品菜单
wd.find_element_by_css_selector('.sidebar-menu li:nth-of-type(2)').click()

addCustomerOrMedicion('南京中医院1','2551867851','江苏省-南京市-秦淮区-汉中路-501')
addCustomerOrMedicion('南京中医院2','2551867852','江苏省-南京市-秦淮区-汉中路-502')
addCustomerOrMedicion('南京中医院3','2551867853','江苏省-南京市-秦淮区-汉中路-503')

# 点击客户菜单
wd.find_element_by_css_selector('.sidebar-menu li:nth-of-type(3)').click()
addCustomerOrMedicion('青霉素盒装1','YP-32342341','青霉素注射液,每支15ml,20支装')
addCustomerOrMedicion('青霉素盒装2','YP-32342342','青霉素注射液,每支15ml,30支装')
addCustomerOrMedicion('青霉素盒装3','YP-32342343','青霉素注射液,每支15ml,40支装')



# ****   添加 订单 *****

# 点击订单菜单
wd.find_element_by_css_selector('.sidebar-menu li:nth-of-type(4)').click()

# 点击添加按钮
wd.find_element_by_class_name('glyphicon-plus').click()

# 输入订单名称
name = wd.find_element_by_css_selector('.add-one-area .form-control')
name.send_keys('南中订单1')

# 两个select
selectElements = wd.find_elements_by_css_selector('.add-one-area select')

# 选择客户
Select(selectElements[0]).select_by_visible_text("南京中医院2")
# 选择药品
Select(selectElements[1]).select_by_visible_text("青霉素盒装1")

wd.find_element_by_css_selector(
    '.add-one-area input[type=number]')\
    .send_keys('100')

# 第1个 btn-xs 就是创建按钮, 点击创建按钮
wd.find_element_by_css_selector('.add-one-area .btn-xs').click()

wd.quit()

补充练习

VIP学员请联系老师获取补充练习题