一、selenium环境配置步骤
1、准备好python环境
2、准备好selenium环境
下载或更新到最新版本
pip install -U selenium
3、下载浏览器对应的driver版本
4、driver配置环境变量
5、在python中import对应的依赖
二、Driver配置
Driver的介绍:
https://www.selenium.dev/documentation/en/webdriver/driver_requirements/
Driver的下载:
- 淘宝镜像:https://npm.taobao.org/mirrors/chromedriver/
- 官方网站:https://chromedriver.storage.googleapis.com/index.html
Driver的安装:
- 找到和自己浏览器版本适配的driver版本,通过浏览器的设置查看浏览器版本,然后找对应附近版本的驱动
- 导入到环境变量中
验证驱动配置环境变量是否成功:
三、三种等待方式
直接等待
又称为强制等待,线程休眠一定的时间
import time
time.sleep(1)
隐式等待
设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常。
隐式等待是全局的,只需要设置一次。
self.driver.implicitly_wait(3)
显示等待
在代码中定义等待条件,当条件发生时才继续执行代码。
WebDriverWait配合until() 和 until_not() 方法,根据判断条件进行等待。
程序每隔一段时间(默认是0.5秒)进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间。
四、Web控件的交互
常用的操作事件(右键点击,页面滑动,表单操作等)
4.1、Actions
官方文档:https://selenium-python.readthedocs.io/api.html
4.1.1、ActionChains
执行PC端的鼠标点击、双击、右键、拖拽等事件
执行原理
调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放在一个队列里,当你调用perform()方法时,队列中的事件会依次执行。
具体写法
链式写法
ActionChains(driver).move_to_element(element).click(element).perform()
分布式写法
actions = ActionChains(driver)
actions.move_to_element(element)
actions.click(element)
actions.perform()
示例
from time import sleep
import pytest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
class TestActionChains:
def setup(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5)
self.driver.maximize_window()
def teardown(self):
self.driver.quit()
def test_action_chains_click(self):
"""
模拟点击:click
模拟双击:double_click
模拟右键点击:context_click
pause:每个操作完成后,暂停时间
:return:
"""
self.driver.get('http://sahitest.com/demo/clicks.htm')
click_me_ele = self.driver.find_element(By.XPATH, '//*[@value="click me"]')
right_click_me_ele = self.driver.find_element(By.XPATH, '//*[@value="right click me"]')
dbl_click_me_ele = self.driver.find_element(By.XPATH, '//*[@value="dbl click me"]')
ActionChains(self.driver).click(click_me_ele).pause(
1).double_click(dbl_click_me_ele).pause(
1).context_click(right_click_me_ele).pause(1).perform()
def test_action_chains_move_to(self):
"""鼠标移动到某个元素上:move_to_element"""
self.driver.get('https://www.baidu.com/')
ele = self.driver.find_element_by_id('s-usersetting-top')
ActionChains(self.driver).move_to_element(ele).perform()
sleep(3)
def test_action_chains_drag_drop(self):
"""元素拖拽到某个元素上"""
self.driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
drag_ele = self.driver.find_element_by_id('dragger')
drop_eles = self.driver.find_elements(By.XPATH, '//*[@class="item"]')
for drop_ele in drop_eles:
# ActionChains(self.drivers).drag_and_drop(drag_ele, drop_ele).perform()
# ActionChains(self.drivers).click_and_hold(drag_ele).release(drop_ele).perform()
ActionChains(self.driver).click_and_hold(drag_ele).move_to_element(drop_ele).release().perform()
sleep(0.5)
def test_action_chains_keys(self):
"""
ActionChains模拟按键:
模拟按键有多种方法,能用win32api来实现,能用SendKeys来实现,也可以用selenium的
WebElement对象的send_keys()方法来实现
:return:
"""
self