news 2026/4/17 6:01:38

简单入门seleniumUI自动化测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单入门seleniumUI自动化测试

一、selenium的介绍

Selenium是一个流行的自动化测试工具,用于测试Web应用程序的功能和用户界面。它可以模拟用户在浏览器中的操作,如点击、输入文本、选择下拉框等,以及验证页面元素的状态和属性。Selenium可以帮助测试人员自动执行重复的测试任务,提高测试效率并减少人工错误。

二、selenium的原理

在我们的自动化程序中,我们需要导入selenium库中的WebDriver类来创建一个WebDriver对象,通过调用selenium客户端库相应的函数发送请求给浏览器驱动(如ChromeDriver)。

当我们使用WebDriver驱动程序执行代码时,WebDriver会将我们的指令转化为HTTP请求,并将其发送给浏览器驱动程序。

浏览器驱动是连接Selenium库和浏览器的桥梁,它负责与浏览器进行通信,并执行我们编写的代码来控制和操作浏览器。

浏览器驱动程序接收到这些HTTP请求后,会将其转化为浏览器可执行的指令,并将指令发送给浏览器进行执行。执行完成后,浏览器将结果返回给浏览器驱动程序,再由浏览器驱动程序将结果转化为HTTP响应,并将其返回给我们的代码程序。

三、selenium的八种元素定位的方法

selenium实现UI自动化的关键就在于元素定位,可谓,只要定位了元素就能够调用方法对UI元素进行操控。在介绍元素定位的方法前,我们需要先知道我们定位的代码写得对不对,此时F12的强大之处就体现出来了!

可以把开发者工具调出来,选择Elements,随便点击一个元素,然后点击Ctrl+F,在此搜索框可以搜索到当前页面的所有元素,再把我们定位元素的代码复制进行搜索,若搜索结果能定位到元素,则证明定位元素的方法写对了。

在selenium中,有八种元素定位的方法,下面将进行介绍。

1、ID定位:

find_element(By.ID, 'Id属性值')

举例:

id属性值为kw,则代码为find_element(By.ID, 'kw')

在 CSS 中,id是用于标识网页元素的一种重要属性并且id是唯一的,因此,若定位的元素存在id值的话,通过ID定位是一个非常便捷的方式。

2 、name定位:

find_element(By.NAME,'name属性值')

举例:

name属性值为referrer,则代码为find_element(By.NAME,'referrer)

3、class定位:

find_element(By.CLASS_NAME,'class属性值')

举例:

class属性值为foot-async-script,则代码为find_element(By.CLASS_NAME,'foot-async-script')

当class属性值有多个时,可以指定任意一个class 属性值,都可以选择到这个元素

4、tag定位:

find_element(By.TAG_NAME,'元素的标签值')

举例:

标签值为style,则代码为find_element(By.TAG_NAME,'style')

因为定位到的元素不唯一,所以我们可以使用find_elements(By.TAG_NAME,'style'),注意find_element和find_elements的区别,find_elements返回的是一个列表

5、link_text定位:

find_element(By.LINK_TEXT,'超链接文字')

举例:

如百度首页的视频则为超链接文字,代码可写为find_element(By.LINK_TEXT, '视频')

6、partial_link_text定位:

find_element(By.PARTIAL_LINK_TEXT,'超链接部分文字')

举例,

如超链接文字太长,也可以只输入部分,也能定位到元素, 如图上的“百度一下,你就知道-移动首页”属性值可写为:移动首页,代码:find_element(By.PARTIAL_LINK_TEXT, '移动首页')即可定位到元素

7、css定位:

find_element(By.CSS_SELECTOR,'css值')

更多的时候,元素是没有id、class值的,或者属性值不唯一,此时我们可以用CSS selector语法来选择元素,CSS选择器是Web开发中常用的一种定位元素的方法,可以在HTML文档中快速准确地找到所需的元素。

(1)通过标签名tag选择元素

例如 div, p, a等标签,例如,找出所有标签名为div的元素

find_elements(By.CSS_SELECTOR, 'div')

(2)通过类名class选择元素

语法为在class值前加一个.号,

举例:

代码为:find_element(By.CSS_SELECTOR, '.foot-async-script')

(3)通过ID选择元素

语法为在id值前加一个#号,

举例:

代码为:find_element(By.CSS_SELECTOR, '#result_tts_player')

(4)通过属性来选择元素

语法为[属性名=属性值]

举例:

代码为:find_element(By.CSS_SELECTOR, '[name=theme-color]')也可以与标签名、id值或者类名组合使用 如find_element(By.CSS_SELECTOR, 'meta[name=theme-color]')

(5)通过子元素来选择

语法:元素1 > 元素2

若元素2在元素里面,如:

类属性wgt-navbar是类属性navbar-wrapper层级下的,则可以通过子元素语法来更准确的定位元素,代码为:find_element(By.CSS_SELECTOR, '.navbar-wrapper > .wgt-navbar)

(6)通过后代元素来选择

语法:元素1 元素2

与子元素一样,后代元素也是在元素里面;不同的是,子元素只能是元素的直接子元素,而后代元素可以不是直接子元素,子元素一定是后代元素,后代元素不一定是子元素

比如元素a > 元素b > 元素c > 元素d,元素b是元素a的子元素,元素c是元素b的子元素但不是a的子元素,元素c是元素a的后代元素。

举例:

类属性navbar-bg是类属性wgt-navbar层级下的,而wgt-navbar是navbar-wrapper的子元素,则navbar-bg是navbar-wrapper的后代元素。 则可以通过后代元素语法来更准确的定位元素,代码为:find_element(By.CSS_SELECTOR, '.navbar-wrapper .navbar-bg)

8、Xpath定位

XPath定位的优点是灵活且功能强大,可以根据元素的属性、标签名、层级关系、文本内容等多个特征进行定位。在某些情况下,XPath定位可能更适合定位复杂的元素结构或特殊的元素。然而,XPath表达式相对于CSS选择器来说更复杂一些,有时可能会更加冗长。因此,在实际使用中,可以根据具体的情况选择使用CSS选择器还是XPath定位来定位元素。

XPath定位方式可以分为绝对路径和相对路径两种方式。

(1)绝对路径定位:

绝对路径是从根节点开始,通过一系列的节点路径来定位元素。绝对路径以斜杠 / 开头,表示根节点,然后按照节点层级关系逐级定位。例如,/html/body/div[1]/input 表示从根节点开始,先选择html元素,然后选择body元素,再选择第一个div元素,最后选择其中的input元素。

(2)相对路径定位:

相对路径是相对于当前节点的路径,更常用且灵活。相对路径以双斜杠 // 开头,表示从当前节点的任意位置开始,选择符合条件的元素。例如,//input 表示选择文档中所有的input元素,不论其在文档中的位置。下面介绍下如何根据元素的属性、标签名、层级关系、文本内容等特征进行定位。

//tagname: 选择所有具有指定标签名的元素

//tagname[@attribute='value']: 选择具有指定属性和属性值的元素。

//* [@attribute='value']: 选择具有指定属性和属性值的任意元素

//parent/child: 选择父元素下的直接子元素。

//ancestor/descendant: 选择ancestor元素下的所有descendant元素。

//* [text()='value']: 选择具有指定文本内容的任意元素。

XPath定位方式也支持使用逻辑运算符和多个条件进行定位。例如,可以使用 and、or、not 来组合多个条件。

四、selenium的常用元素操作

click():单击元素。

send_keys(value):向输入框元素发送文本。

clear():清空输入框元素的文本。

get_attribute(name):获取元素的指定属性值。

is_displayed():判断元素是否可见。

is_enabled():判断元素是否可用。

is_selected():判断元素是否被选中。

五、实例

需求:从百度搜索进入微博,然后获取微博热搜数据并输出到txt文档中

  1. import time

  2. from selenium import webdriver

  3. from selenium.webdriver.common.by import By

  4. class test(object):

  5. def __init__(self):

  6. self.driver = webdriver.Chrome()

  7. self.driver.get('https://www.baidu.com/')

  8. #self.driver.get('https://weibo.com/')

  9. self.driver.implicitly_wait(10) #`全局等待` 该方法接受一个参数, 用来指定最大等待时长

  10. self.driver.maximize_window() #最大化浏览器页面

  11. def baidu_search(self):

  12. self.driver.find_element(By.ID,'kw').send_keys('微博') #通过id值定位

  13. self.driver.find_element(By.CSS_SELECTOR,"[value=百度一下]").click() #通过CSS选择器定位

  14. self.driver.find_element(By.PARTIAL_LINK_TEXT,'微博-随时随地发现新鲜事').click() #通过超链接定位

  15. for handle in self.driver.window_handles: #不断切换窗口至我们想要的窗口:Sina

  16. # 先切换到该窗口

  17. self.driver.switch_to.window(handle)

  18. # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口

  19. if 'Sina' in self.driver.title:

  20. # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,

  21. break

  22. def get_weibo_hot_search(self):

  23. time.sleep(10)

  24. hot_search_list = self.driver.find_elements(By.XPATH, '//*[@class="wbpro-textcut f14 cla"]')

  25. print(len(hot_search_list))

  26. print(hot_search_list)

  27. for list in hot_search_list:

  28. hot_search_text=list.text

  29. self.save_data(hot_search_text)

  30. def save_data(self, hot_search_text):

  31. with open(r'C:\Users\User\Desktop\output.txt', 'a', encoding='utf-8', newline='') as f: # 用追加的方式将数据保存到txt文件中

  32. # for number,hot_search_text in hot_search.items():

  33. f.write(hot_search_text+'\n')

  34. def main(self):

  35. self.baidu_search()

  36. self.get_weibo_hot_search()

  37. self.driver.quit()

  38. if __name__ == '__main__':

  39. ceshi = test() # 实例化对象

  40. ceshi.main() # 调用类函数入口

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 20:09:07

阿里通义Z-Image-Turbo医疗可视化:解剖示意图生成可行性测试

阿里通义Z-Image-Turbo医疗可视化:解剖示意图生成可行性测试 1. 引言:AI图像生成在医疗可视化中的潜力与挑战 随着人工智能技术的快速发展,AI图像生成模型在多个垂直领域展现出巨大应用前景。其中,医疗可视化作为医学教育、临床…

作者头像 李华
网站建设 2026/4/15 13:11:32

简单又实用!给你的开发板加上开机自启功能

简单又实用!给你的开发板加上开机自启功能 1. 引言:为什么需要开机自启? 在嵌入式开发和物联网项目中,开发板常常需要在上电后自动运行特定任务,例如初始化 GPIO 引脚、启动传感器采集程序、点亮状态指示灯或运行后台…

作者头像 李华
网站建设 2026/4/15 7:43:40

MANUS:用于视觉、语言、行动模型创建的高保真第一人称数据采集设备

“RoboBrain-Dex:多源自我中心训练用于集成灵巧视觉-语言-行动模型”。灵巧手遥操作目前为止仍然是机器人技术中最具挑战性的前沿领域之一。尽管视觉-语言-动作模型在通用机器人能力方面表现出很大潜力,但其面临一个关键瓶颈:灵巧手技能的大规…

作者头像 李华
网站建设 2026/4/14 8:22:49

AI智能文档扫描仪镜像测评:开箱即用的办公自动化工具推荐

AI智能文档扫描仪镜像测评:开箱即用的办公自动化工具推荐 1. 背景与需求分析 在现代办公场景中,纸质文档的数字化处理已成为高频刚需。无论是合同归档、发票报销,还是会议白板记录,用户都需要将拍摄的照片转化为清晰、规整的“扫…

作者头像 李华
网站建设 2026/4/14 2:28:19

金融播报场景适配:IndexTTS2专业语调调节技巧

金融播报场景适配:IndexTTS2专业语调调节技巧 1. 引言:金融播报对语音合成的特殊要求 在金融信息传播场景中,语音播报不仅是信息传递的工具,更是专业性与可信度的体现。传统的通用文本转语音(TTS)系统往往…

作者头像 李华
网站建设 2026/4/14 11:27:43

Qwen All-in-One文档生成:技术说明自动产出实践

Qwen All-in-One文档生成:技术说明自动产出实践 1. 项目背景与核心价值 在边缘计算和资源受限场景中,如何高效部署人工智能能力成为工程落地的关键挑战。传统方案通常采用“多模型并行”架构,例如使用 BERT 系列模型处理分类任务&#xff0…

作者头像 李华