自动化测试:selenium详解
点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快说到自动化测试就不得不提大名鼎鼎的Selenium。Selenium 是如今最常用的自动化测试工具之一支持快速开发自动化测试框架且支持在多种浏览器上执行测试。Selenium学习难度小开发周期短。对测试人员来说如果你编程经验不足python Selenium 是个很好的选择。语法简约清晰可以显著减少后期维护难度和工作压力。用PythonSelenium做自动化测试可支持多种浏览器爬虫中也可用来解决JavaScript渲染问题。模拟浏览器进行网页加载今天我们就介绍一下如何用 Selenium 快速开始 Web 测试工作一、声明浏览器对象注意点一Python文件名或者包名不要命名为selenium会导致无法导入from selenium import webdriver #webdriver可以认为是浏览器的驱动器要驱动浏览器必须用到webdriver支持多种浏览器这里以Chrome为例 browser webdriver.Chrome()二、访问页面并获取网页htmlfrom selenium import webdriver browser webdriver.Chrome() browser.get(https://www.taobao.com) print(browser.page_source)#browser.page_source是获取网页的全部html browser.close()三、查找元素单个元素from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.taobao.com) input_first browser.find_element_by_id(q) input_second browser.find_element_by_css_selector(#q) input_third browser.find_element_by_xpath(//*[idq]) print(input_first,input_second,input_third) browser.close()常用的查找方法find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector也可以使用通用的方法from selenium import webdriver from selenium.webdriver.common.by import By browser webdriver.Chrome() browser.get(https://www.taobao.com) input_first browser.find_element(BY.ID,q)#第一个参数传入名称第二个传入具体的参数 print(input_first) browser.close() 多个元素elements多个s input_first browser.find_elements_by_id(q)四、元素交互操作-搜索框传入关键词进行自动搜索更多操作http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement #可以有属性、截图等等browser webdriver.Chrome() url http://www.runoob.com/try/try.php?filenamejqueryui-api-droppable browser.get(url) browser.switch_to.frame(iframeResult)#切换到iframeResult框架 source browser.find_element_by_css_selector(#draggable)#找到被拖拽对象 target browser.find_element_by_css_selector(#droppable)#找到目标 actions ActionChains(browser)#声明actions对象 actions.drag_and_drop(source, target) actions.perform()#执行动作 更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains五、执行JavaScript有些动作可能没有提供api比如进度条下拉这时我们可以通过代码执行JavaScript from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.zhihu.com/explore) browser.execute_script(window.scrollTo(0, document.body.scrollHeight)) browser.execute_script(alert(To Bottom))六、获取元素信息获取属性from selenium import webdriver from selenium.webdriver import ActionChains browser webdriver.Chrome() url https://www.zhihu.com/explore browser.get(url) logo browser.find_element_by_id(zh-top-link-logo)#获取网站logo print(logo) print(logo.get_attribute(class)) browser.close()获取文本值from selenium import webdriver browser webdriver.Chrome() url https://www.zhihu.com/explore browser.get(url) input browser.find_element_by_class_name(zu-top-add-question) print(input.text)#input.text文本值 browser.close()#获取Id位置标签名大小from selenium import webdriver browser webdriver.Chrome() url https://www.zhihu.com/explore browser.get(url) input browser.find_element_by_class_name(zu-top-add-question) print(input.id)#获取id print(input.location)#获取位置 print(input.tag_name)#获取标签名 print(input.size)#获取大小 browser.close()七、Frame操作frame相当于独立的网页如果在父类网frame查找子类的则必须切换到子类的frame子类如果查找父类也需要先切换from selenium import webdriver from selenium.common.exceptions import NoSuchElementException browser webdriver.Chrome() url http://www.runoob.com/try/try.php?filenamejqueryui-api-droppable browser.get(url) browser.switch_to.frame(iframeResult) source browser.find_element_by_css_selector(#draggable) print(source) try: logo browser.find_element_by_class_name(logo) except NoSuchElementException: print(NO LOGO) browser.switch_to.parent_frame() logo browser.find_element_by_class_name(logo) print(logo) print(logo.text)八、等待隐式等待当使用了隐式等待执行测试的时候如果 WebDriver没有在 DOM中找到元素将继续等待超出设定时间后则抛出找不到元素的异常。换句话说当查找元素或元素并没有立即出现的时候隐式等待将等待一段时间再查找 DOM默认的时间是0from selenium import webdriver browser webdriver.Chrome() browser.implicitly_wait(10) #等待十秒加载不出来就会抛出异常10秒内加载出来正常返回 browser.get(https://www.zhihu.com/explore) input browser.find_element_by_class_name(zu-top-add-question) print(input)显式等待指定一个等待条件和一个最长等待时间程序会判断在等待时间内条件是否满足如果满足则返回如果不满足会继续等待超过时间就会抛出异常from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC browser webdriver.Chrome() browser.get(https://www.taobao.com/) wait WebDriverWait(browser, 10) input wait.until(EC.presence_of_element_located((By.ID, q))) button wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, .btn-search))) print(input, button)title_is 标题是某内容 title_contains 标题包含某内容 presence_of_element_located 元素加载出传入定位元组如(By.ID, p) visibility_of_element_located 元素可见传入定位元组 visibility_of 可见传入元素对象 presence_of_all_elements_located 所有元素加载出 text_to_be_present_in_element 某个元素文本包含某文字 text_to_be_present_in_element_value 某个元素值包含某文字 frame_to_be_available_and_switch_to_it frame加载并切换 invisibility_of_element_located 元素不可见 element_to_be_clickable 元素可点击 staleness_of 判断一个元素是否仍在DOM可判断页面是否已经刷新 element_to_be_selected 元素可选择传元素对象 element_located_to_be_selected 元素可选择传入定位元组 element_selection_state_to_be 传入元素对象以及状态相等返回True否则返回False element_located_selection_state_to_be 传入定位元组以及状态相等返回True否则返回False alert_is_present 是否出现Alert 详细内容 http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions九、前进后退-实现浏览器的前进后退以浏览不同的网页import time from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com/) browser.get(https://www.taobao.com/) browser.get(https://www.python.org/) browser.back() time.sleep(1) browser.forward() browser.close()十、Cookiesfrom selenium import webdriver browser webdriver.Chrome() browser.get(https://www.zhihu.com/explore) print(browser.get_cookies()) browser.add_cookie({name: name, domain: www.zhihu.com, value: germey}) print(browser.get_cookies()) browser.delete_all_cookies() print(browser.get_cookies())选项卡管理 增加浏览器窗口import time from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com) browser.execute_script(window.open()) print(browser.window_handles) browser.switch_to_window(browser.window_handles[1]) browser.get(https://www.taobao.com) time.sleep(1) browser.switch_to_window(browser.window_handles[0]) browser.get(http://www.fishc.com)十一、异常处理from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com) browser.find_element_by_id(hello) from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElementException browser webdriver.Chrome() try: browser.get(https://www.baidu.com) except TimeoutException: print(Time Out) try: browser.find_element_by_id(hello) except NoSuchElementException: print(No Element) finally: browser.close() # 详细文档 http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。

相关新闻

新零售时代的敏捷供应链:线上线下融合下的货运物流系统设计思路

新零售时代的敏捷供应链:线上线下融合下的货运物流系统设计思路

温馨提示:文末有资源获取方式~~在物流行业蓬勃发展与居民生活需求日益增长的背景下,货运搬家系统成为提高运输效率、降低运营成本的重要工具。一套成熟的货运搬家系统需要整合多方面技术,实现从订单管理到运输执行的全流程数字化。接下来&…

2026/7/5 0:17:19 阅读更多 →
汉诺塔(Java)

汉诺塔(Java)

1.问题描述有a,b,c三个柱子,现有n个圆盘在a柱上,且下面的圆盘始终比上面的圆盘大现只能从上面取出圆盘,且每次只能取出一个圆盘,必须时刻保证下面的圆盘比上面的大2.解决方式;递归求解代码package recursionHannuoTa;i…

2026/5/17 0:46:01 阅读更多 →
MyBatis插入员工密码为空?SQL语句多写字段导致默认值失效

MyBatis插入员工密码为空?SQL语句多写字段导致默认值失效

【避坑指南】MyBatis插入员工密码为空?一个字段引发的困惑!关键词:MyBatis插入密码为空、数据库默认值被覆盖、SQL字段冗余、后端开发避坑 适用人群:Java后端开发者、MyBatis使用者、正在被“神秘空值”困扰的你 阅读时间&#xf…

2026/7/3 23:40:58 阅读更多 →

最新新闻

2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术

2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术

1. 项目概述:为什么Nmap依然是渗透测试的基石如果你在网络安全这个行当里待过一阵子,或者哪怕只是刚入门,大概率都听过Nmap这个名字。它就像木匠手里的锤子,厨师手里的刀,是那种你明知道它“古老”,但每次开…

2026/7/5 0:17:44 阅读更多 →
WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍?

WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍?

WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍? 【免费下载链接】WpfDesigner The WPF Designer from SharpDevelop 项目地址: https://gitcode.com/gh_mirrors/wp/WpfDesigner 还在为WPF界面开发中的繁琐XAML代码而烦恼吗&…

2026/7/5 0:15:43 阅读更多 →
基于YOLOv8的猫狗品种识别系统开发实战

基于YOLOv8的猫狗品种识别系统开发实战

1. 项目概述:基于YOLOv8的猫狗品种识别系统这个项目本质上是一个计算机视觉领域的典型应用——利用YOLOv8目标检测算法实现猫狗品种的自动识别。我在实际部署中发现,相比传统图像处理方法,深度学习方案在复杂场景下的识别准确率能提升40%以上…

2026/7/5 0:13:42 阅读更多 →
从零实现SHA-1哈希算法:原理、代码与性能优化实战

从零实现SHA-1哈希算法:原理、代码与性能优化实战

1. 项目概述:从“知其然”到“知其所以然”的SHA-1实现之旅在信息安全领域,哈希算法扮演着数据完整性校验和数字签名的基石角色。SHA-1(Secure Hash Algorithm 1)作为曾经的主流算法,虽然因其安全性问题已不再被推荐用…

2026/7/5 0:13:42 阅读更多 →
SillyTavern企业级AI对话前端部署指南:5步构建高可用架构

SillyTavern企业级AI对话前端部署指南:5步构建高可用架构

SillyTavern企业级AI对话前端部署指南:5步构建高可用架构 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern SillyTavern作为面向高级用户的LLM前端界面,为企业AI对话系…

2026/7/5 0:11:41 阅读更多 →
AI开发实战指南:从大模型应用到Agent构建的技术栈与学习路线

AI开发实战指南:从大模型应用到Agent构建的技术栈与学习路线

最近和一位从卡内基梅隆大学(CMU)AI领域出来的资深科学家朋友深聊了一次,话题从AI的历史、当下的技术浪潮,一直延伸到我们开发者该如何应对。这次交流让我感触很深,也解答了我心中很多关于“AI现在到底在发生什么”的困…

2026/7/5 0:11:41 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻