web自动化测试selenium的基本使用

目录

初始化浏览器并打开网页

定位网页元素

定位的方法

模拟键盘操作 

模拟鼠标操作

 xpath方法

xpath结点

路径表达式


selenium是一个很流行的自动化测试的库,主要用于模拟浏览器的运行,是web应用测试的工具。

在使用selenium时,需要具备以下软件:

python3,pycharm(可有可无),浏览器驱动(取决于你要模拟哪个浏览器),selenium库

具体如何安装及配置,这不是我要写的重点,网上有很多全面且详细的教程,可以参考

具备以上这些条件以后,我们打开pycharm,New一个新项目,在.venu文件夹下创建一个文件test.py

首先导入selenium库

from selenium import  webdriver

注:可能有一部分用户安装好selenium库后,导入后运行时,会出现selenium库无法找到的情况,这个时候,依次点击File->Settings->Project:*->python interpreter,点击右上角的Add interpreter,进去后选择system interpreter,选择New,Location选择你安装的的python.exe的位置,点击OK即可

初始化浏览器并打开网页

此时我们可以创建初始化浏览器了,我这里以Edge浏览器为例

driver = webdriver.Edge();

此时我们运行代码,为了方便,我加了5秒的停留,不然刚运行就结束了

运行后,自动帮我打开了网页,也可以看到提示edge正由自动测试软件控制 

我们如果想访问某个网址,此时需要向网址发送请求,请求方法有很多,我们这里使用get进行请求百度官网

driver.get("http://baidu.com")

运行后,它会自动帮我打开百度网页,注意,webdriver会等待页面完全加载,才会把控制权交给测试或脚本

定位网页元素

那我们想在百度搜索框中搜索想要的内容,该如何做呢?

这时候需要进行定位了,我们首先需要定位到搜索框,然后向搜索框中发送消息,输入好后,点击发送。这是流程

既然需要定位,那我们必须要知道,我们目标位置的属性,比如搜索框,我们需要知道它的id,class或name才可以进行定位,而这些需要我们按f12打开开发者工具进行查找

找到以后我们发现,搜索框的id是kw,因此我们可以根据id进行定位,当然也可以根据类或其他的进行定位,这里有一些方法:

定位的方法

既然使用id定位,那我们直接使用第一行的函数:

属性 函数
ID find_element(By.ID,"")
CLASS find_element(By.CLASS,"")
CSS find_element(By.CSS,"")
XPATH find_element(By.XPATH,"")
LINK_TEXT find_element(By.LINK_TEXT,"")
PARTIAL_LINK_TEXT find_element(By.PARTIAL_LINK_TEXT,"")
TAG find_element(By.TAG,"")
#需要导入
from selenium.webdriver.common.by import By

input = driver.find_element(By.ID,"kw")

或者通过class定位也可以

input = driver.find_element(By.CLASS,"s_ipt")

模拟键盘操作 

然后定位好以后,我们需要模拟键盘向搜索框input中写入数据,假设我想搜索“python”

这里我们需要使用send_keys进行发送:

input.send_keys("python")

此时我们只是输入了,但并没有搜索,所以我们可以模拟键盘输入回车键

//需要导入包
from selenium.webdriver.common.keys import Keys

input.send_keys(Keys.RETURN)

同样键盘可以其他快捷键,如下:

 这样便成功控制浏览器自动打开百度,并搜索Python了

模拟鼠标操作

同样的,对于搜索这一步,我们也可以使用模拟鼠标的方式来进行。先定位到搜索按钮,然后再使用click 方法进行点击,效果是一样的

driver.find_element(By.ID,"su").click()

对于网页元素的操作,可以有如下几种:

 

但是selenium为我们提供了一个强大的类ActionChains,它允许用户以编程方式执行复杂的鼠标和键盘操作

from selenium.webdriver.common.keys import Keys

#perform() 方法是必须的。它的作用是执行之前链式操作中定义的所有动作。
#click这些事件只有在执行到perform时才会被执行

search = driver.find_element(By.ID,"su")
ActionChains(driver).click(search).perform()

除了单击操作,还有下面的操作

至此我们已经完成了一个打开百度,并搜索python的自动化代码了

代码如下:

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


#初始化浏览器
driver = webdriver.Edge()

#get请求访问百度网址
driver.get("http://baidu.com")

#定位搜索框
input = driver.find_element(By.ID,"kw")
#driver.find_element(By.CLASS,"s_ipt")

#向搜索框中输入数据
input.send_keys("python")
#input.send_keys(Keys.ENTER)

#点击搜索按钮
#perform() 方法是必须的。它的作用是执行之前链式操作中定义的所有动作。
#click这些事件只有在执行到perform时才会被执行
search = driver.find_element(By.ID,"su")
ActionChains(driver).click(search).perform()

time.sleep(5)

driver.close();

 xpath方法

XPath 是一种 XML 路径,用于浏览页面的 HTML 结构。它是一种语法或者语言用来查找使用 XML 路径表达的网页中的任意元素

而html就是一种特殊的xml,所以可以利用xpath来查找html中元素

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。如:

/html/body/div[1]/div[2]/div[1]/input

和我们平时看到的文件路径相似

C:/Users/h/AppData 

xpath结点

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及根节点

为了解释,我拿一段代码作为示例

<html xmlns:namespace="http://www.example.com">
<head>
<meta charset="utf-8">
<title>xpath教程</title>
</head>
<body>
 
<!-- 测试 HTML -->
<h1 name="header">我的第一个标题</h1>
 
<p>我的第一个段落。</p>
 
</body>
</html>

对于上面的代码:

  1. <html> 就是根节点
  2. 每个标签都是一个元素,比如:<h1>我的第一个标题</h1>
  3.  <h1 name="header">中的name=“header”就是一个属性
  4. <p>我的第一个段落。</p> 中的“我的第一个段落。”就是文本
  5. <html xmlns:namespace="http://www.example.com">中的namespace就是命名空间
  6. <!-- 测试 HTML -->就是一个注释

节点之间的关系有,父子,同胞等

路径表达式

(图片来源网络,侵删)

和我们平时看到的路径类似,只不过一个是结点,一个是文件夹

问题://div/span 和 //div//span 有什么区别?

//div/span:选择div元素的子节点中的span
//div//span:选择div元素中的所有span的结点
比如对于下面的html,使用“//div/span”只能选中一个span,但是使用"//div//span"可以选中两个span

<div>
  <span>Hello<span>
  <ul>
     <span>World</span>
  </ul>
<div>

节点和元素的区别

以 * 和 node()为例:

//*:选中了5个元素:(5) [html, head, title, body, div.box]
//node():选中了8个节点:(8) [<!DOCTYPE html>, html, head, title, text, body, div.box, text]
 

<!DOCTYPE html>
<html>
	<head>
		<title>题目</title>
	</head>
	<body>
		<div class="box">Hello</div>
	</body>
</html>

轴相当于是利用节点之间的关系定位节点

语法规则:轴名称::节点测试[谓语]

看完下面的例子就对这个轴的使用理解深刻了

 注:图片来源博主:兰亭序咖啡

总结的规律:

所有的child::XXX 都可以直接写XXX

比如://a//child::text()   --> //a//text()

           //div//child::input --> //div//input

到这里关于自动化测试简单的示例就结束了,如果有任何疑问的,欢迎私信或评论区留言~

相关推荐

  1. Web测试自动化工具Selenium使用

    2024-07-17 02:58:02       59 阅读
  2. Selenium——基于WebUI自动化测试工具(一)

    2024-07-17 02:58:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 02:58:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 02:58:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 02:58:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 02:58:02       69 阅读

热门阅读

  1. Butch Wilmor与Sunny Williams升空计划截停?

    2024-07-17 02:58:02       19 阅读
  2. MySQL面试题-索引篇

    2024-07-17 02:58:02       22 阅读
  3. ES6 对象的新增方法(十四)

    2024-07-17 02:58:02       20 阅读
  4. powerShell相关

    2024-07-17 02:58:02       16 阅读
  5. Set接口

    2024-07-17 02:58:02       17 阅读
  6. 【Pandas】-Series数据类型

    2024-07-17 02:58:02       25 阅读
  7. 高程值的二维数组生成tiff栅格文件格式

    2024-07-17 02:58:02       27 阅读
  8. C#WPF DialogHost.Show 弹出对话框并返回数据

    2024-07-17 02:58:02       20 阅读
  9. QSFPDD光模块文档解析

    2024-07-17 02:58:02       21 阅读
  10. 【Python 项目】照片马赛克 - 3

    2024-07-17 02:58:02       24 阅读
  11. 如何衡量机器学习分类模型(python)

    2024-07-17 02:58:02       22 阅读
  12. Backend - Dockerfile 镜像档

    2024-07-17 02:58:02       24 阅读