选择、操作web元素-2
11月3日
等待web元素的出现
例子:百度搜索松勤网,点击操作后不等待页面刷新,下面选择页面元素的时候,该元素还是未出现
sleep方案的弊病:固定的等待时间,导致测试用例执行时间很长
为什么click函数不像get函数等待页面刷新?click未必会导致页面更新,get一定会导致页面更新
selenium解决方案:选择一个元素的时候,代码设定一个最大等待时长,周期性(每隔半秒钟)重新寻找元素,直到该元素找到(返回),或者超出指定最大等待时长(返回空列表或者抛出异常),find_element_by都会循环等待
隐式等待:全局的设定,后面所有的选择的代码都不需要单独的指定周期性等待了 driver.implicitly_wait(10)
也可以先设置10,若有特殊等待时间,在设置一个值(比如60),调用完毕后再改回来
显示等待:为一个操作专门指定等待时间
from selenium.webdriver.support.ui import WebDriverWait
form selenium.webdriver.support import expected_conditions as EC
form selenium.webdriver.common.by import By
ele = WebDriverWait(driver,60).until(EC.presence_of_element_located((By.ID,'username')))
frame的处理
一个例子 :获取网易云音乐排行榜信息 http://music.163.com/#/discover/toplist?id=60198
什么是frame 和iframe http://www.w3school.com.cn/html/html_iframe.asp
切换到frame里面
driver.switch_to.frame(frame_reference)
frame元素的name属性或者ID属性
索引值(从0开始):0
frame所对应的WebElement:driver.find_element_by_tag_name("iframe")
切换回主html里面:driver.switch_to.default_content()
注意那些会变的ID
Selenium 作业 2
打开百度新歌榜, http://music.baidu.com/top/new 在排名前50的歌曲中,找出其中排名上升的歌曲和演唱者 注意: 有的歌曲名里面有 "影视原声" 这样的标签, 要去掉 最终结果显示的结果如下:
我不能忘记你 : 林忆莲
等 : 严艺丹
飞天 : 云朵
粉墨 : 霍尊
春风十里不如你 : 李健 参考答案,往下翻
方法1
# coding:utf8
from selenium import webdriver driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
# driver.implicitly_wait(1)
# 抓取排行榜信息 driver.get('http://music.baidu.com/top/new') # 层层往下查找
div = driver.find_element_by_id("songListWrapper")
ul = div.find_element_by_tag_name("ul") #这行可以省略
liList = ul.find_elements_by_tag_name('li') for li in liList:
# 哪些 是有 有up 标签的 歌曲, F12 查看特性
upTags = li.find_elements_by_class_name("up")
if upTags: # 由于只要 歌曲名和 演唱者名
title = li.find_element_by_class_name("song-title")
titleStr = title.find_element_by_tag_name("a").text authorsStr = li.find_element_by_class_name("author_list").text print('{:10s}:{}'.format(titleStr, authorsStr)) driver.quit()
方法2
# coding:utf8
from selenium import webdriver driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
# driver.implicitly_wait(1)
# 抓取排行榜信息 driver.get('http://music.baidu.com/top/new') # 层层往下查找
div = driver.find_element_by_css_selector("#songListWrapper li") for li in liList:
# 哪些 是有 有up 标签的 歌曲, F12 查看特性
upTags = li.find_elements_by_class_name("up")
if upTags: # 由于只要 歌曲名和 演唱者名
title = li.find_element_by_class_name("song-title")
titleStr = title.find_element_by_tag_name("a").text authorsStr = li.find_element_by_class_name("author_list").text print('{:10s}:{}'.format(titleStr, authorsStr)) driver.quit()
CSS选择器 style属性:定义元素显示样式
什么是CSS选择器
内联(inline)样式 写在元素里面
样式表(内部、外部) 写在head里
css选择器是浏览器用来选择元素的
执行效率高
选择元素的方法
根据tag名 p {color:red;}
根据ID #food {color:red;}
根据class .vagetable {color:red;}
根据tag名和class组合写(如果多个) span.vegetable {color:red;}
用css选择器选择web元素
find_element_by_css_selector
find_elements_by_css_selector
根据tag名 driver.find_element_by_css_selector('p')
根据id driver.find_element_by_css_selector('#food')
根据class driver.find_element_by_css_selector('.vegetable')
后代(descendant)选择器
选择元素内部的元素
语法 <s1> <s2>
选择s1元素里面所有的s2元素
可以是直接子节点,也可以不是
比如
#choose_car option
footer p
可以是很多级
ul ol li em {color:bluse;}
如果在三个iframe从第三个回到第二个iframe也是直接定位到第二个iframeID就可以了吗?
driver.switch_to.parent_frame()
选择、操作web元素-2的更多相关文章
- 选择、操作web元素
11月1日 什么是web元素 Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击.输入文字.拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理 选择元素 ...
- Xpath选择、操作web元素
11月6日 xpath选择 XPath(XML Path Language)是W3C(World Wide Web Consortium)定义的用来在XML文档中选择节点的语言, 主浏览器也支持XPa ...
- 选择、操作web元素-3
11月5日 Selenium 作业 3 登录 51job , http://www.51job.com 输入搜索关键词 "python", 地区选择 "杭州"( ...
- Web自动化 - 选择操作元素 1
文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...
- Web自动化 - 选择操作元素 2
文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
- selenium怎么操作web页面常见的元素
总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...
- Appium之选择/操作元素
Appium是如何选择.操作元素的呢? appium自动化 ------ 选择界面 元素 操作元素 ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...
- Selenium Web元素操作
我们定位到Web页面元素之后,可以对元素进行一系列的操作,实现跟页面的交互.包括点击.文本输入.元素属性获取等.常用的方法列举如下: 方法 描述 click() 点击元素 send_keys(**va ...
随机推荐
- 玄学曲线并不玄 教你如何看懂GPU呈现
红色代表了“执行时间”,它指的是Android渲染引擎执行盒子中这些绘制命令的时间,假如当前界面的视图越多,那么红色便会“跳”得越高.实际使用中,比如我们平时刷淘宝App时遇到出现多张缩略图需要加载时 ...
- 【Graphite】使用dropwizard.metrics向Graphite中写入指标项数据
graphite 定时向Graphite中写入指标项数据,指标项模拟个数3000个 使用的类库 官方文档 dropwizard的github地址 Metric官方文档 metrics.dropwi ...
- ASP.NET MVC如何在Action中返回脚本并执行
我们都知道在aspx页面的cs文件中只要用Respos.Write("<script></scritp>")就可以在前台执行脚本 但是在MVC中就不一样了, ...
- P1015回文数
传送 回文数的判断有个神奇的公式: g[i]==g[leng+-i] 其中leng为字符串长度,看每个g[i]是否都满足它,若满足,就是回文数 ps:洛谷的impossible有毒,必须得复制题干中的 ...
- 单元素枚举类型singleton模块
public enum Elvis { INSTANCE; public void leaveTheBuilding() { System.out.println("Whoa baby, I ...
- Java-Runoob-高级教程-实例-方法:12. Java 实例 – Enum(枚举)构造函数及方法的使用-um
ylbtech-Java-Runoob-高级教程-实例-方法:12. Java 实例 – Enum(枚举)构造函数及方法的使用 1.返回顶部 1. Java 实例 - Enum(枚举)构造函数及方法的 ...
- go语言学习--指针数组和数组指针
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的 ...
- 实现textview竖排文字效果
文字效果
- 20165312 预备作业3 Linux安装及学习
Linux安装及学习 一.安装Vmware虚拟机以及Ubuntu中遇到的问题 因为之前安装过Vmware虚拟机,考虑到两者没有太大的差别,就所以就没有再安装Vbox虚拟机. 在安装Vmware虚拟机增 ...
- 逻辑运算符&逻辑短路
(1)and 逻辑与 全真则真,一假则假 print(True and True) #True print(False and True) #False print(False and False) ...