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 ...
随机推荐
- Kubernetes 学习2 k8s基础概念
一.架构描述 1.基本架构 2.pod ,有两类 a.自主式pod 自我管理的,创建之后,任然是需要提交给API Server,API Server接受之后然后由调度器调度到指定的 node节点,由n ...
- 如何在Ubuntu中添加中文输入法
首先打开终端,输入以下命令 打开终端输入以下命令 弹出设置IBus首选项对话框,单击输入法文本框,再单击添加按钮,选中汉语中的拼音,单击添加,设置完毕. 最后单击输入法图标的选项中的首选项中的拼音模式 ...
- Python cx_oracle自动化操作oracle数据库增删改查封装,优化返回查询数据
# coding=utf-8 import cx_Oracle import os import json os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_C ...
- [java之设计模式]策略模式
策略模式(strategy pattern) 定义>> 将一系列的算法封装到一些列的类里面,并且可以相互替换 作用>> 将算法的变化独立于客户端,将算法的指责和算法的行为分开, ...
- Mac 模拟慢速网络
作为开发者,为了提升用户体验,有时需要模拟不同环境的网络.Mac环境下模拟慢速网络可以使用苹果官方提供的工具:Network Link Conditioner. 1.点击苹果开发者网站提供的下载页面, ...
- C++_构造函数与析构函数
构造函数与析构函数 OOP第二课 1 构造函数 1.1 构造函数具有一些特殊的性质 1.2 定义构造函数的一般形式 1.3 利用构造函数创建对象 2 成员初始化表 3 缺省参数的构造函数 4 重载构造 ...
- JavaWeb日常笔记
1. XML文档的作用和解析 1. XML的基本概述: XML的主要是用来存储一对多的数据,另外还可以用来当做配置文件存储数据.XML的表头如下: <?xml version='1.0' e ...
- 如何创建一个新的vue项目
一.cnpm安装 1.百度node官网,进入官网下载安装包安装好node环境 2.成功后打开cmd命令行工具,执行node-v命令,查看node版本号,如果能输出版本号说明安装成功 3.推荐使用淘宝 ...
- PHP 扩展 trie-tree, swoole过滤敏感词方案
在一些app,web中评论以及一些文章会看到一些*等,除了特定的不显示外,我们会把用户输入的一些敏感字符做处理,具体显示为*还是其他字符按照业务区实现. 下面简单介绍下业务处理. 原文地址:小时刻个人 ...
- laravel artisan 命令列表
5.4版本新增 命令 说明 备注 php artisan make:resource ? 创建api返回格式化资源 >=5.4版本可用 php artisan make:rule ? 创建val ...