web UI 自动化测试:Selenium 语法详解 史上最全

2023-10-27

selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载

一、声明浏览器对象

注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入
from selenium import webdriver#webdriver可以认为是浏览器的驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器,这里以Chrome为例browser = webdriver.Chrome()

二、访问页面并获取网页html

from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.taobao.com')print(browser.page_source)#browser.page_source是获取网页的全部htmlbrowser.close()

三、查找元素

单个元素

from selenium import webdriverbrowser = 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('//*[@id="q"]')print(input_first,input_second,input_third)browser.close()

常用的查找方法

find_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector

也可以使用通用的方法

from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get('https://www.taobao.com')input_first = browser.find_element(BY.ID,'q')#第一个参数传入名称,第二个传入具体的参数print(input_first)browser.close()多个元素,elements多个sinput_first = browser.find_elements_by_id('q')

四、元素交互操作-搜索框传入关键词进行自动搜索

from selenium import webdriverimport timebrowser = webdriver.Chrome()browser.get('https://www.taobao.com')input = browser.find_element_by_id('q')#找到搜索框input.send_keys('iPhone')#传送入关键词time.sleep(5)input.clear()#清空搜索框input.send_keys('男士内裤')button = browser.find_element_by_class_name('btn-search')#找到搜索按钮button.click()

更多操作: ​​​​​​​

http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement #可以有属性、截图等等

五、交互动作,驱动浏览器进行动作,模拟拖拽动作,将动作附加到动作链中串行执行

from selenium import webdriverfrom selenium.webdriver import ActionChains #引入动作链​​​
browser = webdriver.Chrome()url = 'http://www.runoob.com/try/try.php?filename=jqueryui-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 webdriverbrowser = 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 webdriverfrom 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')#获取网站logoprint(logo)print(logo.get_attribute('class'))browser.close()

获取文本值​​​​​​​

from selenium import webdriverbrowser = 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 webdriverbrowser = 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)#获取idprint(input.location)#获取位置print(input.tag_name)#获取标签名print(input.size)#获取大小browser.close()

八、Frame操作

frame相当于独立的网页,如果在父类网frame查找子类的,则必须切换到子类的frame,子类如果查找父类也需要先切换

from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()url = 'http://www.runoob.com/try/try.php?filename=jqueryui-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,默认的时间是0​​​​​​​

from 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 webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom 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,否则返回Falseelement_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回Falsealert_is_present 是否出现Alert
详细内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

十一、前进后退-实现浏览器的前进后退以浏览不同的网页​​​​​​​

import timefrom 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()

十二、Cookies​​​​​​​

from 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 timefrom 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 webdriverfrom 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

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等学习资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web UI 自动化测试:Selenium 语法详解 史上最全 的相关文章

  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 点击存储到固定时间清除存储

    这段代码 无意间想到的 随便写了下来 运行 根据点击之后传递一个参数 将他存入本地存储 方便测试为10秒 10秒后触发下一个事件 清除本地存储 结束
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 低代码配置-列表页组件设计

    保存 表单属性存放 bill 筛选项配置存放 filterLayout 列表按钮存放 buttonLayout 列表布局存放 listLayout api存放 api 数据结构 layout 存放表单基础配置 bill 存放按钮基础配置 b
  • MySQL 核心模块揭秘 | 03 期 | 我是一个事务,请给我一个对象

    每个事务都有一个对象 这篇文章我们聊聊 事务的对象从哪里来 要到哪里去 作者 操盛春 爱可生技术专家 公众号 一树一溪 作者 专注于研究 MySQL 和 OceanBase 源码 爱可生开源社区出品 原创内容未经授权不得随意使用 转载请联系
  • 课设:NFA确定化和最小化程序的设计与实现(html+css+js实现)

    文章目录 问题描述 待解决问题 1 如何存储NFA或者是DFA 2 NFA多初态问题 3 子集化过程思路 4 分割法过程思路 使用方法 下载链接 问题描述
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

    Android WebView是一个内置的组件 允许在Android应用中嵌套显示Web内容 Android WebView的技术原理涉及到使用WebKit引擎来渲染Web内容 并提供一系列API和回调函数 使得开发人员可以控制和定制Web
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 每天10个前端小知识 <Day 14>

    前端面试基础知识题 1 CSSOM树和DOM树是同时解析的吗 浏览器会下载HTML解析页面生成DOM树 遇到CSS标签就开始解析CSS 这个过程不会阻塞 但是如果遇到了JS脚本 此时假如CSSOM还没有构建完 需要等待CSSOM构建完 再去
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 【前端】canvas图片加文字

    注释标记了操作步骤 import React Component createRef from react class CertifyImgRender extends Component bgRef createRef

随机推荐

  • 安装PostgreSql遇到问题:无法将“psql”项识别为cmdlet、函数、脚本文件或可运行程序的名称以及错误: 致命错误: 用户 “x“ Password 认证失败

    今天安装PostgreSql遇到问题 psql 无法将 psql 项识别为cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再试一次 1 open jupyter notebook 2 Ne
  • c 语言整形转换为字符串,C 语言整数与字符串的相互转换

    一 简述 C 语言中整数与字符串的相互转换 有广泛应用的拓展函数 非标准库 也可以自己尝试简单的实现 二 整数转字符串 1 拓展函数 itoa itoa 表示 integer to alphanumeric 是把整型数转换成字符串的一个函数
  • 关于运算符重载的用法

    各类重载运算符的定义
  • 关于JDBC和JDBC-ODBC连接数据库

    本来之前已经配置成功了 后来重装 系统后 忘记了之前的步骤 弄了大半天 才重新配置好 要用JDBC连接数据库 先要安装SQLServer2000 的 驱动 安装完后在安装目录的lib文件夹里有三个文件 msbase jar mssqlser
  • 202316读书笔记

    202316读书笔记 作家榜名著 花间集 花半坼 雨初晴 满身香雾簇朝霞 娇艳轻盈香雪腻 作家榜名著 花间集 作者赵崇祚 房开江 这里有绮丽的艳词 缱绻的缠绵 温婉绵延的思愁 或慵懒梳洗迟 或思人催红颜老 则有绮筵公子 绣幌佳人 递叶叶之花
  • 星际无限CTO张超:IPFS分布式存储将成为新一代存储方式

    8月9日 IPFS分布式存储技术圆桌峰会在昆明盛大启幕 本次峰会汇集了包括大数据 分布式存储 人工智能 云计算 数字资产管理等各路行业大咖 论坛启智慧 共享创价值为目的 得到今日头条 腾讯新闻 火星财经 金色财经 春城晚报 都市时报等诸多媒
  • 解决miner.start() 返回null

    下面我列举了三种解决方案 前面两张是某两位大佬试出来的 第三种是我蒙出来的 第一种解决方案 转载自 http mp weixin qq com s AB9vj1EzOgWT7JyryfQhDg 问题场景 最近技术群中的朋友经常问到这样的问题
  • 前端在html页面之间传递参数的方法

    概念图 目标 前端在html页面之间传递参数的方法 项目中经常会出现的一种情况 有一个列表 比如商品列表 点击列表中的某一项商品 跳转至详情页面 跳转页面时 我们需要传递一个参数过去 这样我们才能通过这个参数进行数据请求 然后根据后台返回的
  • CNN(卷积神经网络)在自然语言处理中的应用

    本文参考自Convolutional Neural Networks for Sentence Classification 结尾处放上传送门 用传统方法进行文本分类任务时 通常将一篇文档所对应的tf idf 向量作为模型的特征输入 但是这
  • Python-求排列组合的方法

    1 调用 scipy 计算排列组合的具体数值 from scipy special import comb perm A perm 3 2 out A 6 0 C comb 3 2 out C 3 0 2 调用 itertools 获取排列
  • systemd 服务配置文件编写

    systemd service 简介 Systemd Service 是 systemd 提供的用于管理服务启动 停止和相关操作的功能 它极大的简化了服务管理的配置过程 用户只需要配置几项指令即可 相比于 SysV 的服务管理脚本 用户不需
  • 【mmdetection 】analyze_logs.py等工具测试

    绘制一些运行的分类损失 python tools analyze logs py plot curve work dirs faster rcnn r50 fpn 1x 20200306 175509 log json keys loss
  • 计算机主板南桥的作用,主板南桥是什么,主板南桥芯片在哪?

    主板南桥是什么 主板南桥芯片在哪 笔者稍懂一点电脑硬件 看到网友提问相关方面的问题 很是乐意回答 网络本来就崇尚人人为我 我为人人么 自己这点半瓶水的知识 本来就拜网上高手的科普文章所赐 所以遇到 像主板南桥是什么 主板南桥芯片在哪这类问题
  • QT学习:实现简单的登录登出界面功能

    在设计实现一个系统的时候 用户登录界面的设计可以说是必不可少的环节 而用户登录界面的实现说到底就是不同窗口之间的切换 在继续下面的工作之前 你首先要添加一个新的Qt设计师界面类 记住要选择Dialog without Buttons 否则方
  • Invalid block tag on line 129: ‘get_tag_list‘, expected ‘endblock‘. Did you forget to register or lo

    Django gt python manage py runserver时报错 Invalid block tag on line 129 get tag list expected endblock Did you fo rget to
  • 手把手教Electron+vue,打包vue项目,打包成桌面程序。

    1 现如今前端框架数不胜数 尤其是angular vue吸引一大批前端开发者 在这个高新技术快速崛起的时代 自然少不了各种框架的结合使用 接下来是介绍electron vue的结合使用 2 Electron是什么 对于我来说Electron
  • 最适合读研究生的城市,有你想去的城市吗?

    最适合读研究生的城市 有你想去的城市吗 有没有一座城市让你心生向往 你会因为城市而去选择院校还是因为学校爱上一座城 下面我们就来看一下人气最高 最适合读研的城市 1 北京 北京作为我国的首都 是全国政治文化中心 人称帝都 北京名校众多 既是
  • UML在软件开发各个阶段的应用

    一 UML5个互联视图 UML Unified Modeling Language 中常用5个互联的视图来描述系统的体系结构 如图 1 用例视图 Use case View 由专门描述可被最终用户 分析人员 测试人员看到的系统行为的用例图组
  • Markdown简介

    目录 什么是Markdown Markdown的发展简史 Markdown的基本写法 标题 文本 分隔线 列表 表格 区块 代码段 链接 图片 其他技巧 什么是Markdown Markdown是一种轻量级标记语言 Markdown的写法比
  • web UI 自动化测试:Selenium 语法详解 史上最全

    selenium主要是用来做自动化测试 支持多种浏览器 爬虫中主要用来解决JavaScript渲染问题 模拟浏览器进行网页加载 一 声明浏览器对象 注意点一 Python文件名或者包名不要命名为selenium 会导致无法导入 from s