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 ...
随机推荐
- java读写本地xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <confi ...
- yum 安装 php5.6
yum 安装 php5.6 安装 PHP rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noa ...
- [LuoguP1352][FJSC]没有上司的舞会
[LuoguP1352][FJSC]没有上司的舞会(Link) 现在你有一棵树,每一个点有一个点权\(R[i]\),如果选择了\(i\)点,那么\(i\)子树上的所有的点都不能选,现在要求选择若干个点 ...
- 解决dpdk中出现IOMMU not found的问题
问题 在使用VFIO前,需要在BIOS打开VT-x和VT-d,想把一个PCIe网卡透传到虚拟机中,发现虚拟机启动失败,提示IOMMU没有找到. 输入以下命令确定vt-d开启 dmesg | grep ...
- Strategy(策略)模式
1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Cod ...
- CSS节选——选择器
CSS,cascading style sheet,层叠样式表,请留意层叠概念. css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:link,:active,:targ ...
- IT经理苏大强:我不吃,我不喝,我要赶项目!
IT经理老苏的日常 1周,2周,3周 -- 为了公司的发展和孩子的奥利奥 这点短痛不算什么 Iron Cloud 微服务开发云[www.ironz.com] 高效满足业务需求 高速交付 驱动增长
- 03_Docker入门(上)之容器创建、容器使用、容器删除
运维架构服务docker:docker入门 一.确保docker就绪 查看docker程序是否存在,功能是否正常 Docker可执行程序的info命令,该命令会返回所有容器和镜像的数量.Docker使 ...
- objc单例的两种安全实现方案
所有转出博客园,请您注明出处:http://www.cnblogs.com/xiaobajiu/p/4122034.html objc的单例的两种安全实现方案 首先应该知道单例的实现有两大类,一个是懒 ...
- Eclipse部署Web项目,常用操作和常见错误的解决方案
部署Web项目到tomcat 在eclipse中找到Servers项,打开服务器(F3)(建议直接删除服务器,重新建立再设置比较好)1.Servers Locations 中选择Use Tomcat ...