Selenium自动化测试实战2-WebDriver高级运用

Selenium WebDriver 高级运用

selenium 等待机制

页面级等待机制:定义 Selenium 等待页面加载完毕的超时时间
使用此函数设置等待时间:driver.set_page_load_timeout(最长等待秒数)


元素级等待:常用于现代页面中的 ajax 请求返回整个过程的等待时间

  • 强制等待:直接 time.sleep(3)强制睡眠
  • 隐式等待:使用该代码设置宽限时间:webdriver.implicitly_wait(等待秒数)
  • 显式等待(最推荐使用):WebDriverWait(WebDriver实例, 超时秒数, 检测时间间隔[可选], 可忽略异常集合[可选] )

脚本级等待机制:设置异步脚本超时时间
driver.set_script_timeout(最长等待秒数)


键鼠模拟

操作链中涉及的所有 WebElement 元素在操作链执行时必须同时存在,且处于可操作状态

ActionChains 操作链,使用流的形式依次处理模拟事件

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains # 记住导包

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

# ActionChains接收一个webdriver对象作为参数
# 链式调用的形式模拟点击
ActionChains(driver).click(driver.find_element(By.LINK_TEXT, "登录")).perform()

复杂操作链模拟:拖放操作

<html>
	<head>
		<style type="text/css">
			#div1 {
				width: 300px;
				height: 100px;
				padding: 10px;
				border: 1px solid #aaaaaa;
			}
		</style>
		<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
		<script src="http://apps.bdimg.com/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
		<script type="text/javascript">
			$(function () {
				$("#drag1").draggable();
				$("#div1").droppable({
					drop: function (event, ui) {
						alert("图片放置成功");
					},
				});
			});
		</script>
	</head>

	<body>
		<p>请把图片拖放到方框中:</p>
		<div id="div1"></div>
		<br />
		<img
			id="drag1"
			src="https://cdn.ptpress.cn/pubcloud/3/app/0718A6B0/cover/20191204BD
54009A.png"
		/>
	</body>
</html>
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("D:\\TestDragAndDrop.html")

ActionChains(driver)\
    .click_and_hold(driver.find_element(By.ID, "drag1"))\
    .move_to_element(driver.find_element(By.ID, "div1"))\
    .release()\
    .perform()

组合键的实现,actionchains 精准控制组合键按下与弹起的动作

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

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

baiduSearchInput = driver.find_element(By.ID, "kw")
baiduSearchInput.send_keys("hello world")

ActionChains(driver)\
    .key_down(Keys.CONTROL)\
    .send_keys("a")\
    .key_up(Keys.CONTROL) \
    .pause(3)\
    .key_down(Keys.CONTROL) \
    .send_keys("x") \
    .key_up(Keys.CONTROL) \
    .pause(3) \
    .key_down(Keys.CONTROL) \
    .send_keys("v") \
    .key_up(Keys.CONTROL) \
    .pause(3) \
    .send_keys(Keys.BACKSPACE)\
    .pause(3)\
    .send_keys(Keys.ENTER)\
    .perform()

操作 Cookie

获取 cookie 的两种方式:

driver.get_cookies()  #获取所有的cookie对象集合
driver.get_cookie(cookie名称)   #根据名称获取单个cookie

driver.add_cookie(cookie对象) # 增加cookie
driver.delete_all_cookies()  #删除全部Cookie
driver.delete_cookie(cookie名称)  #按名称删除指定Cookie

浏览器启动参数

浏览器实例时可以附加很多参数,这是所有参数的默认值

driver = webdriver.Chrome(executable_path='chromedriver', port=0, options=None,
service_args=None, desired_capabilities=None, service_log_path=None, chrome_options=
None, keep_alive=True)

JS 执行器进行深度操作
webdriver.execute_script("JavaScript脚本", 自定义参数集(可选)) #执行同步脚本
webdriver.execute_async_script("JavaScript脚本", 自定义参数集(可选)) #执行异步脚本

异步脚本中,JavaScript 是异步处理的,但是 Selenium 脚本是同步执行的
所以异步脚本必须存在一个 callback 回调函数,selenium 会时刻监测此回调函数,以实现异步 JS 平稳执行


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhillery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值