【Selenium】Selenium自动化进阶Select模块使用说明

前言

由于工作原因,更新慢了一点,最近终于抽出一点时间给大家继续更新Selenium系列,学习的脚步不能停止,希望小伙伴能多多支持。

这次文章属纯文本笔记分享,需要这次的视频教程的小伙伴可以点击并输入暗号:CSDN,这里面最近也已经整理好了自动化测试的不少资料,欢迎大家进入群聊领取
在这里插入图片描述
书接上文:

正文

本篇以百度设置下拉选项框为案例,详细介绍 select 下拉框相关的操作方法。

1.select

1.认识 select

  1. 打开百度-设置-搜索设置界面,如下图所示
    在这里插入图片描述
  2. 箭头所指位置,就是 select 选项框,打开页面元素定位,下方红色框框区域,
    可以看到 select 标签属性:
    < select id=“nr” name=“NR”>
  3. 选项有三个
    < option selected="" value=“10”>每页显示 10 条< /option>
    < option value=“20”>每页显示 20 条< /option>
    < option value=“50”>每页显示 50 条< /option>

2.二次定位

  1. 定位 select 里的选项有多种方式,这里介绍一种简单的方法:二次定位
  2. 基本思路,先定位 select 框,再定位 select 里的选项

参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 通过 text:select_by_visible_text()
s = driver.find_element_by_id("nr")
s.find_element_by_xpath("//option[@value='50']".click()

  1. 还有另外一种写法也是可以的,不过是把最下面两步合并成为一步:

参考代码

driver.find_element_by_id("nr").find_element_by_xpath("//option[@valu
e='50']").click()

3.直接定位

  1. 有很多小伙伴说 firebug 只能定位到 select 框,不能定位到里面的选项,其实是工具掌握的不太熟练。小编接下来教大家如何定位里面的选项。

  2. 用 direbug 定位到 select 后,下方查看元素属性地方,点 select 标签前面的
    +号,就可以展开里面的选项内容了。
    在这里插入图片描述

  3. 然后自己写 xpath 定位或者 css,一次性直接定位到 option 上的内容。
    (不会自己手写的,回头看前面的元素定位内容)

参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 直接通过Xpath定位
driver.find_element_by_xpath(".//*[@id='nr']/option[2]")

4.Select 模块(index)

  1. 除了上面介绍的两种简单的方法定位到 select 选项,selenium 还提供了更高级的玩法,导入 Select 模块。直接根据属性或索引定位。
  2. 先要导入 select 方法:
    from selenium.webdriver.support.select import Select
  3. 然后通过 select 选项的索引来定位选择对应选项(从 0 开始计数),如选择第三个选项:select_by_index(2)

参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 通过索引:select_by_index()
s = driver.find_element_by_id("nr")
Select(s).select_by_index(2)

5.Select 模块(value)

  1. Select 模块里面除了 index 的方法,还有一个方法,通过选项的 value
    值来定位。每个选项,都有对应的 value 值,如
    < select id=“nr” name=“NR”>
    < option selected="" value=“10”>每页显示 10 条 < /option>
    < option value=“20”>每页显示 20 条< /option>
    < option value=“50”>每页显示 50 条< /option>
  2. 第二个选顷对应的 value 值就是"20":select_by_value(“20”)

参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 通过value:select_by_value()
s = driver.find_element_by_id("nr")
Select(s).select_by_value("20 ")

6.Select 模块(text)

1.Select 模块里面还有一个更加高级的功能,可以直接通过选项的文本内容来定位。

2.定位“每页显示 50 条”:select_by_visible_text(“每页显示 50 条”)

参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 通过 text:select_by_visible_text()
s = driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每页显示50条")

7.Select 模块其它方法

1.select 里面方法除了上面介绍的三种,还有更多的功能如下
在这里插入图片描述

# 通过索引定位
select_by_index() :
# 通过 value 值定位
select_by_value() :
# 通过文本值定位
select_by_visible_text() :
# 取消所有选项
deselect_all()# 取消对应 index 选项
deselect_by_index()# 取消对应 value 选项
deselect_by_value()# 取消对应文本选项
deselect_by_visible_text()# 返回第一个选项
first_selected_option()# 返回所有的选项
all_selected_options()

最终参考代码:

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 通过 text:select_by_visible_text()
s = driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每页显示 50 条")
# 分两步:先定位下拉框,再点击选项
s = driver.find_element_by_id("nr")
s.find_element_by_xpath("//option[@value='50']").click()
# 另外一种写法
driver.find_element_by_id("nr").find_element_by_xpath("//option[@valu
e='50']").click()
# 直接通过 xpath 定位
driver.find_element_by_xpath(".//*[@id='nr']/option[2]").click()
# 通过索引:select_by_index()
s = driver.find_element_by_id("nr")
Select(s).select_by_index(2)
# 通过 value:select_by_value()
s = driver.find_element_by_id("nr")
Select(s).select_by_value("20")

2.alert\confirm\prompt

前言

不是所有的弹出框都叫 alert,在使用 alert 方法前,先要识别出到底是不是
alert.
先认清楚 alert 长什么样子,下次碰到了,就可以用对应方法解决。
alert\confirm\prompt 弹出框操作主要方法有:

text:获取文本值
accept() :点击"确认"
dismiss() :点击"取消"或者叉掉对话框
send_keys() :输入文本值 --仅限于 prompt,在 alert 和 confirm 上没有输入

1.认识 alert\confirm\prompt

  1. 如下图,从上到下依次为 alert\confirm\prompt,先认清楚长什么
    样子,以后遇到了就知道如何操作了。
    在这里插入图片描述
  2. html 源码如下(有兴趣的可以 copy 出来,复制到 txt 文本里,后缀改成 html 就可以了,然后用浏览器打开)
<html> 
<head> 
<title>Alert</title> 
</head> 
<body> 
<input id = "alert" value = "alert" type = "button" onclick = "alert('
测试菜鸟小家洛');"/> 
<input id = "confirm" value = "confirm" type = "button" onclick = 
"confirm('确定关注微信公众号:测试菜鸟小家洛');"/><input id = "prompt" value = "prompt" type = "button" onclick = "var name 
= prompt('请输入微信公众号:','测试菜鸟小家洛'); document.write(name) 
"/> 
</body> 
</html>

2.alert 操作

  1. 先用 switch_to_alert()方法切换到 alert 弹出框上
  2. 可以用 text 方法获取弹出的文本 信息
  3. accept()点击确认按钮
  4. dismiss()相当于点右上角 x,取消弹出框
    (url 的路径,直接复制浏览器打开的路径)
# coding:utf-8
from selenium import webdriver
import time
url = "file:///C:/Users/admin/Desktop/testalert.html"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(4)
driver.find_element_by_id("alert").click()
time.sleep(3)
t = driver.weitch_to_alert()
# 打印警告框文本内容
print t.text
# 点警告框确认按钮
t.accept()
# t.dismiss()相当于点x按钮.取消

3.confirm 操作

  1. 先用 switch_to_alert()方法切换到 alert 弹出框上
  2. 可以用 text 方法获取弹出的文本 信息
  3. accept()点击确认按钮
  4. dismiss()相当于点取消按钮或点右上角 x,取消弹出框
    (url 的路径,直接复制浏览器打开的路径)
# coding:utf-8
from selenium import webdriver
import time
url = "file:///C:/Users/admin/Desktop/testalert.html"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(4)
driver.find_element_by_id("confirm").click()
time.sleep(3)
t = driver.weitch_to_alert()
# 打印警告框文本内容
print t.text
# 点警告框确认按钮
t.accept()
# t.dismiss()相当于点x按钮.取消

4.prompt 操作

  1. 先用 switch_to_alert()方法切换到 alert 弹出框上
  2. 可以用 text 方法获取弹出的文本 信息
  3. accept()点击确认按钮
  4. dismiss()相当于点右上角 x,取消弹出框
  5. send_keys()这里多个输入框,可以用 send_keys()方法输入文本内容
    (url 的路径,直接复制浏览器打开的路径)
# coding:utf-8
from selenium import webdriver
import time
url = "file:///C:/Users/admin/Desktop/testalert.html"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(4)
driver.find_element_by_id("confirm").click()
time.sleep(3)
t = driver.weitch_to_alert()
# 打印警告框文本内容
print t.text
t.send_keys("hello selenium")
# 点警告框确认按钮
# t.accept()
# t.dismiss()相当于点x按钮.取消

5.select 遇到的坑

  1. 在操作百度设置里面,点击“保存设置”按钮时,alert 弹出框没有弹出来。(Ie 浏览器是可以的)
  2. 分析原因:经过慢慢调试后发现,在点击"保存设置"按钮时,由于前面的 select 操作后,失去了焦点
  3. 解决办法:在 select 操作后,做个 click()点击操作
    在这里插入图片描述
s = driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每页显示 20 条")
time.sleep(3)
s.click()

最终参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
url = "https://www.baidu.com"
driver.get(url)
driver.implicitly_wait(20)
# 鼠标移动到“设置”按钮
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text("搜索设置").click()
# 通过 text:select_by_visible_text()
s = driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每页显示 20 条")
time.sleep(3)
s.click()
driver.find_element_by_link_text("保存设置").click()
time.sleep(5)
# 获取 alert 弹框
t = driver.switch_to_alert()
print t.text
t.accept()

总结

这一篇应该比较简单,Alert 相关的内容比较少,虽然有一些页面也有弹窗,但不是所有的弹窗都叫 alert。
alert 的弹出 框界面比较简洁,是调用的系统弹窗警告框,没花里胡哨的东西,还是很容易区分的。

以上资料笔记以整理到个人公众号【测试菜鸟小家洛】
也可点击暗号点击并输入暗号:CSDN领取资料文件

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Chaqian/article/details/110392866
今日推荐