Selenium自动化测试第二天(上)
如有任何学习问题,可以添加作者微信:lockingfree
目录
框架
一个框架就是一个独立的网页
frameset: 框架组,用来布局框架
frame: 具体的一个框架,一般放在frameset中
iframe: 内联框架, 可以嵌入到其他网页的body中
切入 层层切入
switch_to.frame() # 只用切 iframe/frame 不用切frameset
- id
- name
- index
- 定位到的frame元素 find_element_by_id("parent")
切出
switch_to.parent_frame() # 跳到上级 多层框架推荐使用
switch_to.defaut_content() # 跳出所有 一层框架推荐使用 也可以用switch_to.parent_frame()跳出框架
示例
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://115.28.108.130/control.html")
# iframe: 内联框架, 可以嵌入到其他网页的正文中,
# frameset: 框架组,用来布局,可以嵌套,不能嵌入到body中,
# frame,框架,需要放到frameset中
# 只用切iframe及frame, frameset是用来布局的,不用切
driver.switch_to.frame("parent_frame")
driver.switch_to.frame("left")
driver.find_element_by_link_text("链接1").click()
driver.switch_to.parent_frame() # 这里不用swith_to.default_content(),不然还要再切到parent_frame
driver.switch_to.frame("main")
print(driver.find_element_by_tag_name("h2").text)
# print(driver.find_element_by_xpath("/html/body/h2").text)
sleep(5)
driver.quit()
练习
打开 http://115.28.108.130/control.html,点击链接1,输出右侧文本内容
注意
- 框架中的页面 尽量不要使用xpath绝对路径定位 /html/body/h2
xpath
- 绝对路径+索引 /html/body/div/form/div[3] 逐层写 结合index index从1开始
- 相对路径+属性(推荐) //div[@id="firstdiv"] 支持多属性结合定位
- 通过子标签 //div[a] 包含链接的div
- 通过文本定位 //[text()="第二个div"] 包含 //[contains(text(), "username")]
- 通过相对位置 //*[text()="第二个div"]/../table
- 轴 //[text()="王五"]/following::a following后面的
//[text()="用户名"]/following::input 用户名后的第一个输入框
也可以通过F12复制(不推荐:有可能有问题)
注意:
- xpath的索引从1开始
- 使用文本定位 注意 换行 空格 特殊字符
- 注意动态位置,动态属性
- 注意复制的xpath可能会有问题
css selector
css选择器, 比xpath快
find_element_by_css_selector("#firstdiv")
基本
- id #firstdiv
- class .stuname
- 标签名 div
*
可以标识任意标签
位置 不支持向上
- 下级 #firstdiv>form>div >或空格
- 同级元素
- 索引: :first-child() :nth-child(n) #firstdiv>form>div:nth-child(3)
属性 不支持判断文本
- 属性 [type="password"] [name=""]
- 属性 ^= 以 开头 $= 以 结尾 *= 包含
- input 常见属性: checked enabled
示例
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://115.28.108.130/control.html")
div = driver.find_element_by_css_selector("#firstdiv>form>div:nth-child(2)")
print(div.text)
table = driver.find_element_by_css_selector("#firstdiv>form>div+table")
print(table.tag_name)
练习:
打开 http://115.28.108.130/control.html#
- 找到"第二个div"并打印文本 text
- 找到"第二个div"同级的table并打印标签名 tag_name
注意:
- css selector不支持往上级查找
- 不支持查找包含某个子标签的标签
- 不支持查找指定文本内容的标签
切换窗口
- switch_to.alert(): 切到弹出框
- switch_to.frame(): 切入框架
- switch_to.window(): 切换窗口
- window_handles: 所有窗口句柄 列表
- current_window_handle: 当前窗口句柄
只有两个窗口
all = driver.window_handles # 所有窗口句柄
old = driver.current_window_handle # 当前窗口出版
for h in all: # h 是当前从all中取出来的句柄
if h != old: # 如果取出来的不等于老窗口
driver.switch_to.window(h) # 切换到新窗口
多个窗口
all = driver.window_handles
for h in all:
driver.switch_to.window(h)
if "腾讯课堂" in driver.title:
break # 跳出循环
示例
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://115.28.108.130/control.html")
# 1. 切到新页面(只打开了两个页面)
driver.find_element_by_partial_link_text("在新页面").click()
print(driver.title) # 还在原页面
all = driver.window_handles
old = driver.current_window_handle
for h in all:
if h!=old:
driver.switch_to.window(h)
print(driver.title) # 切换到了新页面
driver.find_element_by_id("kw").send_keys("龙腾育才")
driver.find_element_by_id("su").click()
sleep(1)
driver.find_element_by_partial_link_text("腾讯课堂").click() # 又打开了新页面
# 2. 多窗口切换, 根据网页标题切换
print(driver.title) # 还在百度搜索页上
all = driver.window_handles
for h in all:
driver.switch_to.window(h)
if "腾讯课堂" in driver.title:
break
else:
print("没有找到相应的页面")
print(driver.title)
sleep(5)
driver.quit()
练习
打开百度 http://www.baidu.com
搜索赶集网
切换到赶集网,并打印标题
此为北京龙腾育才 Python高级自动化(Selenium部分)授课笔记
课程介绍
想要参加现场(北京)/网络课程的可以联系作者微信:lockingfree
- 高效学习,快速掌握Python自动化所有领域技能
- 同步快速解决各种问题
- 配套实战项目练习
Selenium自动化测试第二天(上)的更多相关文章
- Selenium自动化测试第二天(下)
如有任何学习问题,可以添加作者微信:lockingfree 目录 Selenium自动化测试基础 Selenium自动化测试第一天(上) Selenium自动化测试第一天(下) Selenium自动化 ...
- Selenium自动化测试第一天(上)
如有任何学习问题,可以添加作者微信:lockingfree 目录 Selenium自动化测试基础 Selenium自动化测试第一天(上) Selenium自动化测试第一天(下) Selenium自动化 ...
- Selenium自动化测试第一天(下)
如有任何学习问题,可以添加作者微信:lockingfree 目录 Selenium自动化测试基础 Selenium自动化测试第一天(上) Selenium自动化测试第一天(下) Selenium自动化 ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)
1.简介 jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有ja ...
- 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- Selenium自动化测试框架入门整理
关注嘉为科技,获取运维新知 本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明.作为开发人员.测试人员入门参考. 本文参考:Se ...
随机推荐
- python3之安装mysql问题
python3是不能通过pip install mysql或pipinstall mysqldb这样的形式来安装mysql. 只能 pip install PyMySQL 至于如何在文件中引用? 答曰 ...
- Android 代码集装箱
1. 一个APP下载升级的Demo(通知栏实时更新下载进度)------(一) 2.一个APP下载升级的Demo(通知栏实时更新下载进度)------(二) 3.APK包名修改
- 我的QT5学习之路(二)——第一个程序
一.前言 “工欲善其事,必先利其器”,上一节,我介绍了Qt的安装和配置方法,搭建了基本的开发平台.这一节,来通过一个简单的例子来了解Qt的编程样式和规范,开始喽~~~ 二.第一个程序——Hello W ...
- myeclipse2014黑色主题风格设置
http://jingyan.baidu.com/article/915fc41494db8451384b2043.html?st=2&os=0&bd_page_type=1& ...
- 【星云测试】开发者测试-采用精准测试工具对Spring Boot应用进行测试
简介:本文主要介绍把现今主流的springboot框架项目和精准测试工具进行结合和应用,通过精准测试的数据穿透.数据采集.测试用例与代码的双向追溯.数据分析等一系列精准测试的特有功能,达到对项目质量的 ...
- Kubernetes(二)-- 搭建(未完待续)
一.部署前规划 1. 操作系统初始化设置 :需要设置好集群机器,关闭防火墙和selinux 2. 创建ca证书和私钥 :集群间通信要加密,那么肯定要有ca的创建,以后就用这一步创建的ca当作证书颁发机 ...
- cocoscreator 2.04 配置 visual code 断点调试
1,cocoscreator ,chrome浏览器,visual code 这三个软件的安装 2,官网配置visual code 环境 https://docs.cocos.com/creator/m ...
- DDL-库的管理
一.创建库create database [if not exists] 库名[ character set 字符集名]; 二.修改库alter database 库名 character set 字 ...
- oracle同义词语句备份
--创建同义词create synonym T_SYSTEM_USERDEPARTMENT for xtzl.T_SYSTEM_USERDEPARTMENT;--查询同义词SELECT * FROM ...
- JNDI数据源(在Tomcat下配置JNDI多数据源实例)
一,添加数据库驱动包加入classpath. 这里我用到了oracle和mysql.所以由两个jar包:ojdbc14.jar和mysql-connector-java-5.1.13-bin.jar. ...