使用 webdriver API 编写自动化脚本的基本语法

简介: 1. 打开和关闭浏览器1)打开浏览器并访问 URL2)关闭浏览器窗口2. 元素的定位1)以 id 定位元素2)以 name 定位元素3)以 tag name 定位元素4)以 class name 定位元素5)以 xpath 定位元素6)以 css selector 定位元素7)以 link text 定位元素8)以 partial link text 定位元素3. 操作测试元素1)键盘输入与鼠标点击2)submit 提交表单3)获取元素内容4. 添加等待1)sleep 休眠2)智能等待5. 打印网页 title 和 URL6. 浏览器操作1)设置浏览器

1. 打开和关闭浏览器

引入 webdriver API

from selenium import webdriver

在所有的对浏览器操作之前都要先获取浏览器驱动

# 获取 Chrome 浏览器驱动
driver = webdriver.Chrome()

1)打开浏览器并访问 URL

打开浏览器访问百度主页

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

2)关闭浏览器窗口

下面两种方法都可以实现关闭浏览器的操作

但 close 方法仅仅关闭当前聚焦的浏览器窗口,quit 方法关闭所有浏览器窗口,并清除浏览器缓存


driver.quit()
driver.close()

2. 元素的定位

元素的定位是自动化测试的核心,要操作一个元素,首先就要先定位到该元素


webdriver 中提供了一系列使用元素不同属性定位元素的方法:


id

name

tag name

class name

xpath

link text

partial link text

css selector

在网页源代码中找到对应的属性值,就可以定位该元素


注:不管用哪种方法,都要保证在当前页面上该属性值是唯一的

1)以 id 定位元素

定位 id 属性值为 kw 的元素

driver.find_element_by_id("kw")


2)以 name 定位元素

定位 name 属性值为 wd 的元素

driver.find_element_by_name("wd")


3)以 tag name 定位元素

定位标签名为 input 的元素

driver.find_element_by_tag_name("input")

4)以 class name 定位元素

定位 class name 属性值为 s_ipt 的元素

driver.find_element_by_class_name("s_ipt")
• 1


5)以 xpath 定位元素

在浏览器 控制台中找到要定位的元素右键 选择 复制 XPath 来获取对应元素的 XPath 属性值


98.png


定位 xpath 属性值为 //*[@id=‘kw’] 的元素

driver.find_element_by_xpath("//*[@id='kw']")

6)以 css selector 定位元素

css selector 属性值的获取方式同 xpath 属性值的获取方式一样,点击 复制 selector 即可获取

定位 css selector 属性值为 #kw 的元素

driver.find_element_by_css_selector("#kw")


7)以 link text 定位元素

这种方式用来定位带有链接的文字,link text 属性值就是文字内容

driver.find_element_by_link_text("贴吧")


8)以 partial link text 定位元素

这种方式也是定位带有链接的文字,不过不同于上一种方法的是,这里的属性值可以是页面上具体文字链接内容的一部分

driver.find_element_by_partial_link_text("贴")


3. 操作测试元素

前面说了常用的定位元素的方法,定位只是第一步,定位之后需要对元素进行操作以完成测试


webdriver 中常用的操作元素的方法有:


click: 点击元素

send_keys: 模拟键盘在元素中输入内容

clear: 清空元素内容

submit: 提交

text: 得到元素内的文本信息

1)键盘输入与鼠标点击

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 在百度搜索框中输入 python
driver.find_element_by_id("kw").send_keys("python")
# 点击搜索按钮
driver.find_element_by_id("su").click()
# 清空搜索框内容
driver.find_element_by_id("kw").clear

2)submit 提交表单

submit 只能在元素属性中 type=“sumit” 时使用,此时使用 submit 实现的效果和 click 点击相同

driver.find_element_by_id("kw").submit()
• 1

3)获取元素内容


使用 text 可以获取到已经定位的元素内所有的文本信息

text = driver.find_element_by_class_name("c-container").text
print(text)

4. 添加等待

等待是一个非常重要的事,由于网络延迟的问题,有时候页面还未加载出来时,但是代码已经执行到下一步,下一步的代码要定位的元素还未被浏览器加载出来,就无法定位导致出错,此时就需要添加等待来等待浏览器将页面加载出来再进行定位


添加等待还可以让我们更直观的看到浏览器执行的每一步

1)sleep 休眠

引入 time 包,在指定休眠时间即可

import time
time.sleep(3)


2)智能等待

通过 webdriver 下的 implicitly_wait() 方法就可以实现智能等待


智能等待 是指程序会在一个时间范围内等待,当脚本执行到某个元素的定位时,如果可以定位则等待结束,如果不能定位,则会继续等待,直到等待时间超过设置的最大等待时间

driver.implicitly_wait(3) # 最大等待时间 3s


5. 打印网页 title 和 URL

# 打印当前网页 URL
print(driver.current_url)
# 打印当前网页 title,即在 html 源码中 title 标签中的文字信息
print(driver.title)


6. 浏览器操作

1)设置浏览器窗口的宽和高

# 设置浏览器宽 400,高 1000
driver.set_window_size(400, 1000)


2)设置浏览器窗口最大化

driver.maximize_window()


3)浏览器页面的前进和后退

每个浏览器都会有前进和后退按钮,来操作浏览器返回下一个或上一个页面

# 后退,返回上一个页面
driver.back()
# 前进,返回下一个页面
driver.forward()


4)控制浏览器滚动条

浏览器滚动条的控制需要依靠 js 脚本

# 把滚动条拉到最底端
js1 = "var q=document.documentElement.scrollTop=10000"   
driver.execute_script(js1)
# 把滚动条拉到最顶端
js2 = "var q=document.documentElement.scrollTop=0"       
driver.execute_script(js2)

7. 键盘操作

要使用键盘操作,必须引入 Keys 包

键盘操作的按键通过 send_keys 调用,必须要先定位元素再操作

from selenium.webdriver.common.keys import Keys


1)键盘按键

# TAB 键
driver.find_element_by_id("user_login").send_keys(Keys.TAB)
# ENTER 键 
driver.find_element_by_id("user_password").send_keys(Keys.ENTER)
# 空格键
driver.find_element_by_id("user_login").send_keys(Keys.SPACE)
# ESC 键
driver.find_element_by_id("user_login").send_keys(Keys.ESCPACE)

2)组合键盘按键

# Ctrl + a,全选
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "a")
# Ctrl + x,剪切
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "x")
# Ctrl + c,复制
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "c")
# Ctrl + v,粘贴
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "v")

8. 鼠标事件

要使用鼠标操作,需要引入 ActionChains 包

同样的,需要先定位元素再进行操作

from selenium.webdriver.common.action_chains import ActionChains
# 鼠标双击
b = driver.find_element_by_id("su")
ActionChains(driver).double_click(b).perform()
# 鼠标右键
a = driver.find_element_by_id("kw")
ActionChains(driver).context_click(a).perform()
# 拖动鼠标到指定位置
a = driver.find_element_by_xpath("//*[@id='s-top-left']/div/a")   # 定位移动后的位置
ActionChains(driver).move_to_element(a).perform()

9. 定位一组元素

1)如何打开本地 HTML 页面

本地 HTML 页面打开时,在浏览器的 URL 显示为 “file:///” + 文件的绝对路径,所以我们需要拼接以下再进行打开


引入 os 包,使用 os.path.abspath(文件绝对路径) 来指定一个绝对路径,再使用字符串拼接的方法将前缀 “file:///” 加上,就得到了我们想要的URL


2)定位一组 checkbox

有如下 HTML 代码,需从中定位所有 checkbox 类型的 input,并全部勾选


<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>Checkbox</title>
</head>
<body>
<h3>checkbox</h3>
<div class="well">
    <form class="form-horizontal">
        <div class="control-group">
            <label class="control-label" for="c1">checkbox1</label>
            <div class="controls">
                <input type="checkbox" id="c1" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="c2">checkbox2</label>
            <div class="controls">
                <input type="checkbox" id="c2" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="c3">checkbox3</label>
            <div class="controls">
                <input type="checkbox" id="c3" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="r">radio</label>
            <div class="controls">
                <input type="radio" id="r1" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="r">radio</label>
            <div class="controls">
                <input type="radio" id="r2" />
            </div>
        </div>
    </form>
</div>
</body>
</html>

自动化脚本如下:

import os
import time
from selenium import webdriver
# 获取浏览器驱动
driver = webdriver.Chrome()
# 拼接 URL
url = "file:///" + os.path.abspath("D:\\JAVA\\Python\\project\\selenium\\test2.html")
# 打开 HTML 页面
driver.get(url)
# 定位所有的 input 标签,得到的结果是一个 list
elements = driver.find_elements_by_tag_name("input")
for element in elements:
    # 在 list 中筛选 checkbox 并勾选
    # get_attribute 得到元素的某一个属性值
    if element.get_attribute("type") == "checkbox":
        element.click()
        time.sleep(1)
time.sleep(3)
driver.quit()

10. 多层框架/窗口定位

在 HTML 页面的设计中,常常会有框架的嵌套,或者在操作浏览器时常常会出现多个窗口,此时若可以定位到某个具体的框架或者窗口,再去定位元素就会简单许多


100.png


1)多层框架定位

webdriver 中提供了下面两种方法来对框架进行定位

# 定位到当前页面内嵌套的某个框架
driver.switch_to.frame(frameName)
# 从嵌套中跳出,跳回最外面的默认页面
driver.switch_to.default_content()

注意:


在框架之间进行跳转时,只能从当前页面跳转到当前页面内嵌套的页面


如上图的框架嵌套:


default 可以跳转到 f1,不能到 f2


f1 可以到 f2,f2 不能到 f1


2)多窗口定位

webdriver 中针对窗口的方法是:switch_to.window


用法以 switch_to.frame 相同


11. alert 弹框的处理

webdriver 中提供了如下方法对 alert 弹框进行定位:


switch_to.alert: 定位到弹框

定位到弹框之后再使用如下方法对 alert 弹框进行处理:


accept: 点击确认按钮

dismiss: 点击取消按钮,如果有的话

send_keys: 向弹框中的输入框输入值,如果没有输入框就不可用

text: 获取弹框中的文字信息


目录
相关文章
|
21天前
|
JSON 监控 测试技术
Groovy脚本编写员工上网行为监控自动化测试
本文介绍了如何使用Groovy脚本创建一个自动化工具来监控员工的网络活动。通过编写简单脚本记录员工访问的网站并打印信息,可进一步扩展为将数据保存至数据库。此外,通过设定定时任务,实现了每30分钟自动监控一次的功能。最后,展示了如何将监控数据转换为JSON格式并使用HTTP POST请求提交到网站,以实现数据的自动化上报,有助于企业保障网络安全、保护数据并提升工作效率。
109 5
|
21天前
|
弹性计算 JSON Shell
基于Web API的自动化信息收集和整理
【4月更文挑战第30天】
23 0
|
9天前
|
监控 数据挖掘 API
京东商品API接口:电商数据自动化的钥匙
京东商品API接口为电商领域带来了巨大的便利和潜力。通过本篇文章,读者应该能够了解如何使用京东商品API接口,并通过示例代码学习如何实际调用API获取商品数据。 随着技术的不断发展,京东商品API接口将继续为电商自动化、数据分析和市场研究提供支持,帮助商家和开发者在竞争激烈的市场中保持领先。我们鼓励读者继续探索和学习,充分利用京东商品API接口带来的机遇。
|
12天前
|
XML 数据格式 Python
Python自动化脚本编写技巧
本文介绍了Python自动化脚本的编写技巧:选择合适的库(如os, requests, BeautifulSoup)以简化编程,利用循环和条件语句实现流程控制,通过函数和模块提高代码的可读性和可维护性,使用异常处理保证脚本稳定性,以及借助日志记录进行问题追踪。通过这些方法,可以编写出高效、稳定的自动化脚本。
|
21天前
|
JavaScript 前端开发
Playwright执行 JavaScript 脚本:探索浏览器自动化的新境界
在Web自动化中,Playwright提供`page.evaluate()`和`page.evaluate_handle()`来执行JavaScript脚本。`page.evaluate()`返回脚本执行结果,而`page.evaluate_handle()`返回JSHandle。示例展示了如何使用它们,如打印网页标题、操作元素及获取页面内容。通过这些方法,可以处理常规方法难以操作的网页元素。
19 2
|
21天前
|
测试技术 API 开发者
使用 Playwright 脚本录制简化自动化测试:完全指南
Playwright提供了一种脚本录制功能,帮助开发者通过交互式操作自动生成测试脚本,提升测试效率。使用Playwright的命令行工具`codegen`,如`playwright codegen python &lt;url&gt;`,可以记录浏览器操作并生成Python测试脚本。生成的脚本使用Playwright API模拟用户交互,如`page.click()`和`page.fill()`。这种方法简化了自动化测试脚本的编写,促进了测试流程的加速。
31 1
|
21天前
|
IDE 测试技术 开发工具
从零开始:使用 Playwright 脚本录制实现自动化测试
Playwright提供了一种便捷的脚本录制功能,类似于Selenium IDE。通过运行`playwright codegen`命令,你可以启动一个浏览器并记录你的操作,生成Python或异步代码。在示例中,展示了如何录制登录百度的过程,生成的代码可以直接用于自动化测试。Playwright Inspector允许你编辑和转换测试代码,支持生成Pytest格式的测试用例,方便Python开发者使用。这个功能使Playwright成为强大的Web自动化测试工具。
20 3
|
21天前
|
Web App开发 JavaScript 测试技术
python自动化测试实战 —— WebDriver API的使用
python自动化测试实战 —— WebDriver API的使用
|
21天前
|
XML JSON API
电商数据集成:利用API接口实现商品详情自动化获取
在电子商务的快速发展中,数据集成成为提升业务效率和增强市场竞争力的关键。API(应用程序编程接口)作为数据集成的核心工具,允许商家自动化获取商品详情,从而实现高效的商品管理和数据分析。本文将探讨如何利用API接口自动化获取商品详情,并分析其对电商业务的影响。
|
21天前
|
SQL 关系型数据库 MySQL
【简单无脑】自动化脚本一键安装虚拟机下的MySQL服务
该文章提供了在虚拟机上安装MySQL服务的简化方法,特别是针对新手。作者提供了一个自动化脚本`install_mysql.sh`,使得安装过程更简单。用户需要下载`install.rpm`资源,将其放在指定目录下,然后创建并编辑脚本文件,将提供的代码粘贴进去,通过`chmod u+x`授权,最后运行脚本`./install_mysql.sh [rpm文件路径]`来安装MySQL。文章还附有相关图片说明。
64 1
【简单无脑】自动化脚本一键安装虚拟机下的MySQL服务