python selenium库学习笔记

教程传送门 -> Selenium Python http://www.testclass.net/selenium_python/

=========================================================

先创建一个文件试一试~ 创建baidutest.py,内容如下

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

print(driver.title)

driver.quit()

执行会以Chrome打开baidu网页,然后关闭。

C:\rf>python baidutest.py

DevTools listening on ws://127.0.0.1:54504/devtools/browser/0b3089e0-2561-48c2-b76b-652e8c684aef
百度一下,你就知道

C:\rf>

关于设置不同浏览器驱动,参考 http://www.testclass.net/selenium_python/selenium3-browser-driver

selenium元素定位

Selenium提供8种定位方式Python selenium中所对应的方法
idfind_element_by_id()
namefind_element_by_name()
class namefind_element_by_class_name()
tag namefind_element_by_tag_name()
link textfind_element_by_link_text()
partial link textfind_element_by_partial_link_text()
xpathfind_element_by_xpath()
css selectorfind_element_by_css_selector()

 

 

 

 

 

 

 

 

 

xpath语法  https://www.w3school.com.cn/xpath/xpath_syntax.asp
css选择器  https://www.w3school.com.cn/cssref/css_selectors.asp

[例] 定位百度的搜索输入框

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw")

 

控制浏览器操作

@控制浏览器窗口大小

使用set_window_size()方法来设置浏览器的大小
driver.set_window_size(480, 800)

使用maximize_window()方法使打开的浏览器全屏显示
driver.maximize_window()

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

#使用set_window_size()方法来设置浏览器的大小
driver.set_window_size(480, 800)

#使用maximize_window()方法使打开的浏览器全屏显示
#driver.maximize_window()

#driver.quit()

@控制浏览器后退、前进
返回上一个网址
driver.back() 

前进到之前的网址
driver.forward() 

@刷新页面
driver.refresh()

 

WebDriver常用方法

@点击和输入
定位元素之后需要对这个元素进行操作,例如在输入框中输入内容、清空输入框、点击按钮
清除文本
clear()

模拟按键输入
send_keys(value)

单击元素
click()

[例] 百度搜索输入框输入python,然后清除,输入selenium,点击搜索

注:搜索框标签的id是“kw”,“百度一下”按钮标签的id是"su"

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("python")
sleep(5)
driver.find_element_by_id("kw").clear()
sleep(2)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(5)

driver.quit()

@提交
提交表单
submit()

[例] 在搜索框输入关键字之后执行“回车” 

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("kw").submit()
sleep(5)

driver.quit()

说明:submit() 也可以提交一个按钮, submit()的应用范围不及 click()广泛。

@其他常用方法
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 获得属性值。
is_displayed(): 设置该元素是否用户可见。

鼠标事件

WebDriver中,关于鼠标操作的方法封装在ActionChains类提供。

执行所有 ActionChains 中存储的行为
perform()

右击
context_click()

双击
double_click()

拖动
drag_and_drop()

鼠标悬停
move_to_element()

[例] 鼠标悬停操作

from selenium import webdriver
# 引入提供鼠标操作的 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")

# 定位到要悬停的元素(右上角的“设置”)
above = driver.find_element_by_link_text("设置")

# 对定位到的元素执行鼠标悬停操作
#ActionChains(driver)->调用 ActionChains()类, 将浏览器驱动 driver 作为参数传入。
ActionChains(driver).move_to_element(above).perform()

这个例子最终没有关闭浏览器,用例执行效果如下(鼠标悬停在“设置”)

 

键盘事件

Keys()类提供了键盘上几乎所有按键的方法,在使用键盘按键方法前需要先导入 keys 类
from selenium.webdriver.common.keys import Keys

常用的键盘操作:

send_keys(Keys.BACK_SPACE) 删除键(BackSpace)

send_keys(Keys.SPACE) 空格键(Space)

send_keys(Keys.ENTER) 回车键(Enter)

send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)

send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)

send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)

send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)

send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12

[例] 模拟上述一系列操作

from selenium import webdriver
from time import sleep
# 引入 Keys 模块
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
sleep(2)

# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
sleep(2)

# 输入空格键+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
sleep(2)
driver.find_element_by_id("kw").send_keys("教程")
sleep(2)

# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
sleep(2)

# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
sleep(2)

# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
sleep(2)

# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
sleep(2)

driver.quit()

获取断言信息

断言即判断结果与预期是否相符。
GUI测试可以通过获取title 、URL和text等信息进行断言。

[例] 获取页面标题、URL和特定文本信息

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 打印当前页面title
title = driver.title
print('Title before search:' + title)

# 打印当前页面URL
now_url = driver.current_url
print('URL before search:' + now_url)

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)

# 再次打印当前页面title
title = driver.title
print('Title after search:' + title)

# 获取结果数目
record_num = driver.find_element_by_class_name('nums_text').text
print('Record number:'+ record_num)

driver.quit()

其中获取结果数目的标签class属性值为“nums_text”

 

脚本运行结果如下:

C:\rf>python test.py

DevTools listening on ws://127.0.0.1:50646/devtools/browser/9cf54638-696b-4b6f-a0af-75bc89a65db9
Title before search:百度一下,你就知道
URL before search:https://www.baidu.com/
Title after search:selenium_百度搜索
Record number:百度为您找到相关结果约39,200,000个

C:\rf>

多窗口切换

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。

current_window_handle:获得当前窗口句柄。

window_handles:返回所有窗口的句柄到当前会话。

switch_to.window():用于窗口之间切换。

例子参考 http://www.testclass.net/selenium_python/more-windows

警告框处理

在WebDriver中处理JS所生成的alert/confirm/prompt ->使用switch_to.alert方法定位到 alert等,然后使用如下方法进行操作

text:获取弹框文本
accept(): 确认
dismiss():取消
send_keys(keysToSend):用于prompt弹框输入keysToSend,alert/confirm会报错

注意:旧版selenium切换到弹框使用switch_to_alert,新版的selenium用switch_to.alert

[例] 打开百度网页,选择设置 -> 搜索设置,点击“保存设置”,

在弹出的警告框点击“确认”

实现代码如下:

from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠标悬停至“设置”链接
link = driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(link).perform()

# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()

# 保存设置
#driver.find_element_by_class_name("prefpanelgo").click()
savebtn = driver.find_element_by_class_name("prefpanelgo")
driver.execute_script("arguments[0].click();", savebtn)

time.sleep(2)

# 获取警告框文本
message = driver.switch_to.alert.text
print(message)
time.sleep(2)

# 接受警告框
driver.switch_to.alert.accept()

driver.quit()

浏览器操作符合预期,后台打印(代码25行)如下:

C:\rf>python test.py

DevTools listening on ws://127.0.0.1:50495/devtools/browser/9cf543d8-a75d-419b-a2cd-e1008fbb6a4e
已经记录下您的使用偏好

C:\rf>

说明:注意代码第17-19行,如果使用17行,注释18、19行,报错元素不可点击,如下

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <a href="#" class="prefpanelgo">...</a> is not clickable at point (579, 240). Other element would receive the click: <td id="se-setting-5">...</td>
换成18、19行可以解决,参考 https://blog.csdn.net/WanYu_Lss/article/details/84137519

下拉框选择

Select类用于定位select标签,使用前需要导入模块 -> from selenium.webdriver.support.select import Select
select_by_value() 方法用于定位下接选项中的value值 

[例]  百度搜索设置的下拉框

from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠标悬停至“设置”链接
driver.find_element_by_link_text('设置').click()
sleep(1)
# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
sleep(2)

# 搜索结果显示条数
sel = driver.find_element_by_xpath("//select[@id='nr']")
Select(sel).select_by_value('50')  # 显示50条
sleep(2)

driver.quit()

cookie操作

WebDriver操作cookie的方法:
获得所有cookie信息
get_cookies()

返回字典的键为name的cookie信息
get_cookie(name)

添加cookie,内容是字典
add_cookie(cookie_dict) 

删除所有cookie信息
delete_all_cookies()

删除指定cookie信息,name是要删除的cookie的名称,optionsString是该cookie的选项
delete_cookie(name,optionsString)

例子参考 http://www.testclass.net/selenium_python/cookie

窗口截图

driver.get_screenshot_as_file("指定截图图片的保存位置和名称")

例子参考 http://www.testclass.net/selenium_python/get-screenshot

关闭浏览器

关闭单个窗口
close()

关闭所有窗口
quit() 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值