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

目录

      • Selenium WebDriver 高级运用
        • selenium 等待机制
        • 键鼠模拟
        • 操作 Cookie
        • 浏览器启动参数
        • JS 执行器进行深度操作

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 平稳执行


你可能感兴趣的:(测试开发,selenium,python,测试工具)