Python Selenium4.3.0(新语法) web自动化测试工具

x33g5p2x  于2022-07-13 转载在 Python  
字(4.8k)|赞(0)|评价(0)|浏览(570)

说明:本教程适用于Python Selenium4.3.0版本,作者百度一大大圈后,发现网上教程均为老版本,无法使用,这里参考老版本与分析源码写出新教程,在新版本中代码更加简介

1 介绍

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等

这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。

中文教程:http://www.selenium.org.cn/

2 入门准备

1、安装

  1. pip install selenium

2、下载浏览器驱动

(1)谷歌驱动

http://chromedriver.storage.googleapis.com/index.html

(2)火狐驱动

https://github.com/mozilla/geckodriver/releases/

3、测试代码
可以指定路径,或将驱动放到当前文件夹

  1. from selenium import webdriver
  2. url = "https://www.baidu.com/"
  3. # 加载驱动
  4. # driver = webdriver.Firefox() # Firefox浏览器
  5. # driver = webdriver.Firefox("驱动路径")
  6. driver = webdriver.Chrome() # Chrome浏览器
  7. # driver = webdriver.Ie() # Internet Explorer浏览器
  8. # driver = webdriver.Edge() # Edge浏览器
  9. # driver = webdriver.Opera() # Opera浏览器
  10. # driver = webdriver.PhantomJS() # PhantomJS
  11. # 打开网页
  12. driver.get(url)

3 具体使用

3.1 元素查找、定位

  1. # 查询首个满足条件
  2. find_element(by=By.ID, value=None)
  3. # 查询所有满足条件 [列表形式返回]
  4. find_elements(by=By.ID, value=None)
  5. 例如:
  6. driver.find_element(By.ID,"author")

参数一by :By.IDBy.CLASS_NAMEBy.NAME
参数二value: 指定 ID、name或Class的值

3.2 控制浏览器操作

1、控制浏览器窗口大小

  1. driver.set_window_size(900, 700)

2、浏览器前进、后退

  1. driver.forward()
  2. driver.back()

3、刷新

  1. driver.refresh()

3.3 Webelement常用方法

1、点击和输入

  1. driver.find_element(By.ID, "kw").clear() # 清除文本
  2. driver.find_element(By.ID, "kw").send_keys("Python") # 模拟按键输入
  3. driver.find_element(By.ID, "su").click() # 点击元素

2、提交
模拟输入框回车操作

  1. 新版本中未测试出功能

3、其他

size:返回元素尺寸
text:获取元素的文本
get_attribute(name):获取属性值
is_displayed:设置元素是否用户可见

总结:

  1. from selenium import webdriver
  2. # 加载驱动
  3. from selenium.webdriver.common.by import By
  4. driver = webdriver.Chrome() # Chrome浏览器
  5. # url = "https://read.douban.com/ebook/7821748/?dcs=search"
  6. url = "https://www.baidu.com/"
  7. driver.set_window_size(900, 700)
  8. # 打开网页
  9. driver.get(url)
  10. driver.find_element(By.ID, "kw").clear() # 清除文本
  11. driver.find_element(By.ID, "kw").send_keys("Python") # 模拟按键输入
  12. driver.find_element(By.ID, "su").click() # 点击元素

4 鼠标操作

5 键盘事件

全选 Ctrol+Asend_keys(Keys.CONTROL, 'a')
复制 Ctrol+Csend_keys(Keys.CONTROL, 'c')
剪切 Ctrol+Xsend_keys(Keys.CONTROL, 'x')
粘贴 Ctrol+Vsend_keys(Keys.CONTROL, 'v')

键盘 F1send_keys(Keys.F1)

键盘 F12send_keys(Keys.F12)

删除键 BackSpacesend_keys(Keys.BACK_SPACE)

空格键 Spacesend_keys(Keys.SPACE)

制表键 Tabsend_keys(Keys.TAB)

Esc键 Tabsend_keys(Keys.ESCAPE)

回车键 ENTERsend_keys(Keys.ENTER)

  1. from selenium import webdriver
  2. # 引入 ActionChains 类
  3. from selenium.webdriver import Keys
  4. # 加载驱动
  5. from selenium.webdriver.common.by import By
  6. driver = webdriver.Chrome() # Chrome浏览器
  7. url = "https://www.baidu.com/"
  8. driver.set_window_size(1000, 900)
  9. driver.get(url)
  10. driver.find_element(By.ID, "kw").clear()
  11. driver.find_element(By.ID, "kw").send_keys("Pythonn")
  12. driver.find_element(By.ID, "kw").send_keys(Keys.BACK_SPACE)

6 获取页面信息

  1. # 获取当前页面URL
  2. now_url = driver.current_url
  3. # 获取当前页面title
  4. title = driver.title

7 等待页面加载完成

7.1 显式等待

显式等待使WebDriver等待某个条件成立时继续执行,否则在达到最长事件抛出超时异常(TimeoutException)

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.ui import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as EC
  5. driver = webdriver.Firefox()
  6. driver.get("https://www.baidu.com")
  7. element = WebDriverWait(driver, 3, 0.5).until(
  8. EC.presence_of_element_located((By.ID, "kw"))
  9. )
  10. element.send_keys('python')
  11. driver.quit()

WebDriverWait类有WebDriver提供,在设置事件内,默认每间隔一段时间检测一次当前页面元素是否存在,如果超时则未检测到,则抛出异常。

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

  • driver:浏览器驱动
  • timeout:最长超时时间,默认单位为s
  • poll_frequency:超时后的异常信息,默认情况下抛–NoSuchElementException异常。

WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。

  • until(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为True。
  • until_not(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为False。

7.2 隐式等待

如果某些元素不是立即可用的,隐式等地啊是告诉WebDriver去等待一定时间后去查找元素。默认等待时间为0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. # 加载驱动
  4. driver = webdriver.Chrome() # Chrome浏览器
  5. url = "https://www.baidu.com/"
  6. driver.set_window_size(1000, 900)
  7. # 隐式等待
  8. driver.implicitly_wait(10) # seconds
  9. driver.get(url)
  10. driver.find_element(By.ID, "kw").clear()
  11. driver.find_element(By.ID, "kw").send_keys("Python")
  12. driver.find_element(By.ID, "su").click()

8 在不同窗口和框架之间移动

9 警告框处理

10 下拉选择框

11 文件上传

  1. driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')

12 cookie操作

WebDriver操作cookie的方法:

get_cookies(): 获得所有cookie信息。
get_cookie(name): 返回字典的key为“name”的cookie信息。
add_cookie(cookie_dict): 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。
delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。
delete_all_cookies(): 删除所有cookie信息

13 调用JavaScript代码

  1. # 获取网页标题
  2. driver.execute_script('return document.title;')

14 关闭浏览器

  1. # 关闭单个窗口
  2. driver.close()
  1. # 关闭所有窗口
  2. driver.quit()

参考地址:
https://baike.baidu.com/item/Selenium/18266
https://zhuanlan.zhihu.com/p/111859925

相关文章