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

  1. 打开百度新歌榜, http://music.baidu.com/top/new
  2.  
  3. 在排名前50的歌曲中,找出其中排名上升的歌曲和演唱者
  4.  
  5. 注意: 有的歌曲名里面有 "影视原声" 这样的标签, 要去掉
  6.  
  7. 最终结果显示的结果如下:
  8. 我不能忘记你 : 林忆莲
  9. : 严艺丹
  10. 飞天 : 云朵
  11. 粉墨 : 霍尊
  12. 春风十里不如你 : 李健
  13.  
  14. 参考答案,往下翻

方法1

  1. # coding:utf8
  2. from selenium import webdriver
  3.  
  4. driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
  5. # driver.implicitly_wait(1)
  6. # 抓取排行榜信息
  7.  
  8. driver.get('http://music.baidu.com/top/new')
  9.  
  10. # 层层往下查找
  11. div = driver.find_element_by_id("songListWrapper")
  12. ul = div.find_element_by_tag_name("ul") #这行可以省略
  13. liList = ul.find_elements_by_tag_name('li')
  14.  
  15. for li in liList:
  16. # 哪些 是有 有up 标签的 歌曲, F12 查看特性
  17. upTags = li.find_elements_by_class_name("up")
  18. if upTags:
  19.  
  20. # 由于只要 歌曲名和 演唱者名
  21. title = li.find_element_by_class_name("song-title")
  22. titleStr = title.find_element_by_tag_name("a").text
  23.  
  24. authorsStr = li.find_element_by_class_name("author_list").text
  25.  
  26. print('{:10s}:{}'.format(titleStr, authorsStr))
  27.  
  28. driver.quit()
  1.  

方法2

  1. # coding:utf8
  2. from selenium import webdriver
  3.  
  4. driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
  5. # driver.implicitly_wait(1)
  6. # 抓取排行榜信息
  7.  
  8. driver.get('http://music.baidu.com/top/new')
  9.  
  10. # 层层往下查找
  11. div = driver.find_element_by_css_selector("#songListWrapper li")
  12.  
  13. for li in liList:
  14. # 哪些 是有 有up 标签的 歌曲, F12 查看特性
  15. upTags = li.find_elements_by_class_name("up")
  16. if upTags:
  17.  
  18. # 由于只要 歌曲名和 演唱者名
  19. title = li.find_element_by_class_name("song-title")
  20. titleStr = title.find_element_by_tag_name("a").text
  21.  
  22. authorsStr = li.find_element_by_class_name("author_list").text
  23.  
  24. print('{:10s}:{}'.format(titleStr, authorsStr))
  25.  
  26. driver.quit()
  1.  

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就可以了吗?

  1. driver.switch_to.parent_frame()

选择、操作web元素-2的更多相关文章

  1. 选择、操作web元素

    11月1日 什么是web元素 Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击.输入文字.拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理 选择元素 ...

  2. Xpath选择、操作web元素

    11月6日 xpath选择 XPath(XML Path Language)是W3C(World Wide Web Consortium)定义的用来在XML文档中选择节点的语言, 主浏览器也支持XPa ...

  3. 选择、操作web元素-3

    11月5日 Selenium 作业 3 登录 51job , http://www.51job.com 输入搜索关键词 "python", 地区选择 "杭州"( ...

  4. Web自动化 - 选择操作元素 1

    文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...

  5. Web自动化 - 选择操作元素 2

    文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...

  6. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  7. selenium怎么操作web页面常见的元素

    总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...

  8. Appium之选择/操作元素

    Appium是如何选择.操作元素的呢? appium自动化  ------  选择界面 元素 操作元素  ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...

  9. Selenium Web元素操作

    我们定位到Web页面元素之后,可以对元素进行一系列的操作,实现跟页面的交互.包括点击.文本输入.元素属性获取等.常用的方法列举如下: 方法 描述 click() 点击元素 send_keys(**va ...

随机推荐

  1. gerrit配置和使用

    参考http://www.cnblogs.com/tesky0125/p/5973642.html 1.安装gerrit replication插件 mkdir ~/tmp cp gerrit-2.1 ...

  2. Hadoop 管理工具HUE配置

    机器环境 Ubuntu 14.10 64位 || OpenJDK-7 || Scala-2.10.4 机群概况 Hadoop-2.6.0 || HBase-1.0.0 || Spark-1.2.0 | ...

  3. CenOS下搭建PPTP服务

    公司生产环境使用的是阿里云主机,采用的是两台nginx主机进行反向代理,现在需要内网一台服务器能够访问公网,所以在nginx服务器上搭建了VPN服务,用于进行内网访问公网. 系统环境:CenOS 6. ...

  4. ubuntu 安装php 扩展和查看扩展包

    利用ubuntu的软件包下载.安装工具:apt-get 输入下面的命令即可安装 php扩展库mcrypt.curl.gd库.mbstring.simplexml. apt-get install ph ...

  5. 服务网关zuul之四:zuul网关配置

    禁用过滤器在Zuul中特别提供了一个参数来禁用指定的过滤器,该参数的配置格式如下:zuul.AccessFilter.pre.disable=true动态加载动态路由通过结合Spring Cloud ...

  6. 廖雪峰Java2-2数据封装-2构造方法

    在2-2-1中,创建1个实例需要3步 Person ming = new Person(); ming.setName(" 小明 "); ming.setAge(16); 问题:能 ...

  7. css文字链接滑过向上移动1像素

    方法一:行高 a{line-height:22px;} a:hover{line-height:21px;}   方法二:定位 a{position:absolute;top:0;} a:hover{ ...

  8. [UE4]虚幻4的网络适合开发什么游戏

    使用虚幻4开发网络游戏的两种方式 一.虚幻4只做客户端,服务器端独立开发,适用于任何网络游戏 二.使用虚幻4同时开发客户端和服务器(使用虚幻4内置的服务器),适用于一部分网络游戏. 如果使用虚幻4作为 ...

  9. NameNode配置HA后及其反过程Hive路径不正确的问题解决

    在CDH5.7下,配置了NameNode的HA后,Hive无正常查询数据了,但是其他的组件HDFS , HBase ,Spark都正常的.Hive新建表出现如下异常: CREATE TABLE `x_ ...

  10. winfrom 控件的显示隐藏方法

    使用Panel作为容器 Panel2.Visible = true; //显示 Panel1.Visible = false; //隐藏