1 Python之自动化测试框架selenium学习

1.1 基础环境准备

1.1.1 python包下载工具的安装地址:

1.1.2 webdriver

1.2 selenium自动化框架的基础使用

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
time.sleep(4) #浏览器响应慢,这是设置响应的时间
driver.get("http://www.178linux.com/")
driver.get_screenshot_as_file("C:\\Users\\mervin\\Desktop\\Python\\1.png") #支持png后缀的图片
driver.refresh() #刷新浏览器操作
driver.back() #返回百度的页面
driver.set_window_size(540, 960)
time.sleep(4)
# driver.forward() #切换到下一页
driver.maximize_window() #设置网页最大化 driver.quit() #退出浏览器的所有进程,然后关闭所有的窗口

1.3 selenium之浏览器元素8种定位方法

1.3.1 火狐浏览器插件环境准备

  • FireBug
  • FirePath

1.3.2 元素定位方法

  1. 通过id定位:find_element_by_id()
  2. 通过name定位:find_element_by_name()
  3. 通过class定位:find_element_by_class_name()
  4. 通过tag定位:find_element_by_tag_name()
  5. 通过link定位:find_element_by_link_text()
  6. 通过partial_link定位:find_element_by_partial_link_text() #适用于字符串较长时的模糊匹配,只用截取其中的一部分字符
  7. 通过Xpath定位:find_element_by_xpath() #适用于一个元素它既没有id、name、class属性也不是超链接的时候
    • 点击FireBug,点击FirePath
    • 点击选择鼠标
    • 选择你要择取的对象.
  8. 通过CSS定位:find_element_by_css_selector()
    • 点击FireBug,点击FirePath,将Xpath改为CSS
    • 点击选择鼠标
    • 选择你要择取的对象.

1.4 Xpath定位语法

官方介绍:XPath即为XML路径语言,它是一种用来确定XML1(标准通用标记语言3的子集)文档中某部分位置的语言,通俗一点讲就是通过元素的路径来查找到这个元素的,相当于通过定位一个对象的坐标,来找到这个对象

1.4.1 属性定位(name,id,class)

driver.find_element_by_xpath("//*[@id='kw']").send_keys("python")
driver.find_element_by_xpath("//*[@name='wd']").send_keys("python")
driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys("python")

1.4.2 其他属性

driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys("python")

1.4.3 标签

1. 有时候同一个属性,同名的比较多,这时候可以通过标签筛选下,定位更准一点
2. 如果不想制定标签名称,可以用*号表示任意标签
3. 如果想制定具体某个标签,就可以直接写标签名称
driver.find_element_by_xpath("//input[@id='kw']").send_keys("python")
driver.find_element_by_xpath("//input[@name='wd']").send_keys("python")
driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("python")

1.4.4 层级

  1. 如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它老爸(父元素)
  2. 找到它老爸后,再找下个层级就能定位到了
driver.find_element_by_xpath("//span[@id='kw']/input").send_keys("python")

1.4.5 索引(从1开始算起)

1. 如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟
2. 虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到
driver.find_element_by_xpath("//select[@id='nr']/option[1]").click()
driver.find_element_by_xpath("//select[@id='nr']/option[2]").click()
driver.find_element_by_xpath("//select[@id='nr']/option[3]").click()

1.4.6 逻辑运算

1. xpath还有一个比较强的功能,是可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)
2. 一般用的比较多的是and运算,同时满足两个属性
driver.find_element_by_xpath("//*[@id='kw' and @autocomplete='off']").send_keys("python")

1.4.7 模糊匹配

1. 比如我要定位百度页面的超链接“hao123”,在上一篇中讲过可以通过by_link,也可以通过by_partial_link,模糊匹配定位到。当然xpath也可以有同样的功能,并且更为强大
driver.find_element_by_xpath("//*[contains(text(),'hao123')]").click()
driver.find_element_by_xpath("//*[contains(@id,'kw')]").click()
driver.find_element_by_xpath("//*[start-with(@id,'s_kw_')]").click()
driver.find_element_by_xpath("//*[ends-with(@id,'kw_wrap')]").click()
driver.find_element_by_xpath("//*[matchs(text(),'hao13')]").click()

1.4.8 firefox插件之Selenium Builder

1. 使用说明:http://www.cnblogs.com/yoyoketang/p/6128548.html

1.5 CSS定位语法

1.5.1 css属性定位

  • css用#表示ID属性
  • css用.表示class属性
  • css直接用标签名称,无任何标识符
driver.find_element_by_css_selector("#kw").send_keys("python")
driver.find_element_by_css_selector(".s_ipt").send_keys("python")
driver.find_element_by_css_selector("input").send_keys("python")

1.5.2 通过其他属性

driver.find_element_by_css_selector("[name='wd']").send_keys("python")

1.5.3 可以通过标签与属性的组合来定位元素

driver.find_element_by_css_selector("input.s_ipt").send_keys("python")

1.5.4 层级关系

driver.find_element_by_css_selector("form#form>span>input").send_keys("python")

1.5.5 css索引[nth-child(1)]

driver.find_element_by_css_selector("select#nr>option:nth-child(1)").send_keys("python")

1.5.6 css逻辑运算

driver.find_element_by_css_selector("input[id='kw'][name='wd']").send_keys("python")

1.6 定位一组元素

1.7 selenium的操作元素

1.7.1 selenium的一些事件方法

  • submit():相当于键盘中的Enter
  • clear():清空操作
  • click():相当于鼠标左键
  • send.keys():输入字符

1.7.2 键盘操作事件

适用于没有操作的按钮,以及在使用submit()出错的情况下

  • 导入模块from selenium.webdriver.common.keys import Keys
  • 使用send_keys(Keys.ENTER)模拟enter键
  • 常用的键盘操作事件有以下几种
    1. 键盘F1到F12:send_keys(Keys.F1) 把F1改成对应的快捷键
    2. 复制Ctrl+C:send_keys(Keys.CONTROL,'c')
    3. 粘贴Ctrl+V:send_keys(Keys.CONTROL,'v')
    4. 全选Ctrl+A:send_keys(Keys.CONTROL,'a')
    5. 剪切Ctrl+X:send_keys(Keys.CONTROL,'x')
    6. 制表键Tab: send_keys(Keys.TAB)

1.7.3 鼠标操作事件

当然除了键盘事件,也有鼠标事件,如:鼠标悬停在某个元素上,鼠标右击,鼠标按住某个按钮拖动

  • 首先需要导入模块from selenium.webdriver.common.action_chains import ActionChains
  • 常用的鼠标操作
    1. move_to_element():鼠标悬停
    2. context_click():右击鼠标
    3. double_click():双击鼠标

1.8 多窗口,句柄

浏览器窗口的属性是通过句柄(handle)来识别的

h=driver.current_window_handle
all_h=driver.window_handles

1.9 iframe之间的切换

iframe的切换默认是支持id和name的

1.9.1 直接使用frameid

driver.switch_to_frame("FRAME_ID") #里面是frame_id
driver.find_element_by_name("email").send_keys("123")

1.9.2 没有frameid的情况下

  • 首先定位iframe
  • 然后使用8种方法具体定位
iframe=driver.find_element_by_tag_name("iframe")
driver.switch_to_frame(iframe)
driver.find_element_by_name("emial").send_keys("123")

1.9.3 释放iframe

driver.switch_to_default_content()

1.9.4 switch_to_frame上的横线

driver.switch_to.frame()

1.10 下拉列框Select

1.10.1 二次定位

  • 先定位select框
  • 再定位select里的选项
driver.find_element_by_id("nr").find_element_by_xpath("//option[@value='50']").click()

1.10.2 select模块

导入包:from selenium.webdriver.support.select import Select

s=driver.find_element_by_id("nr")
Select(s).select_by_index(2)
s=driver.find_element_by_id("nr")
Select(s).select_by_value("20")
s=driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每页显示50条")
  • select_by_index() :通过索引定位
  • select_by_value() :通过value值定位
  • select_by_visible_text() :通过文本值定位
  • deselect_all() :取消所有选项
  • deselect_by_index() :取消对应index选项
  • deselect_by_value() :取消对应value选项
  • deselect_by_visible_text() :取消对应文本选项
  • first_selected_option() :返回第一个选项
  • all_selected_options() :返回所有的选项

1.11 alert/confirm/prompt

1.11.1 alert/confirm/prompt弹出框的操作有:

  1. text:获取文本值
  2. accept() :点击"确认"
  3. dismiss() :点击"取消"或者叉掉对话框
  4. send_keys() :输入文本值 --仅限于prompt,在alert和confirm上没有输入框

切换到alert框上使用switch_to_alert()

注意: 有时候可能会因为鼠标在页面上失去了焦点,没有获取到弹框,我们应该obj.click()主动获取一下

1.12 JS处理滚动条

处理滚动条需要借助js的脚本技术来完成,因此需要execute_script()

  • 顶部
js="var q=document.getElementById('id').scrollTop=0"
driver.execute_script(js)
  • 底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
  • 谷歌浏览器滚动条
js = "var q=document.body.scrollTop=0"
driver.execute_script(js)

python+selenium之悠悠博客学习笔记的更多相关文章

  1. python实现文章或博客的自动摘要(附java版开源项目)

    python实现文章或博客的自动摘要(附java版开源项目) 写博客的时候,都习惯给文章加入一个简介.现在可以自动完成了!TF-IDF与余弦相似性的应用(三):自动摘要 - 阮一峰的网络日志http: ...

  2. FPGA一个博客学习

    FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM

  3. Python课程设计 搭建博客

    安装包Github地址 Python综合设计 233博客 注意还有个email文件是需要填入自己信息的,比如最高权限账号和要发送邮件的账号密码 请安装Python2.7环境,本服务器所用环境为 设置环 ...

  4. python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中

    原文地址: python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中

  5. Python的dict字典结构操作方法学习笔记

    Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...

  6. [Python ]小波变化库——Pywalvets 学习笔记

    [Python ]小波变化库——Pywalvets 学习笔记 2017年03月20日 14:04:35 SNII_629 阅读数:24776 标签: python库pywavelets小波变换 更多 ...

  7. 用python爬虫监控CSDN博客阅读量

    作为一个博客新人,对自己博客的访问量也是很在意的,刚好在学python爬虫,所以正好利用一下,写一个python程序来监控博客文章访问量 效果 代码会自动爬取文章列表,并且获取标题和访问量,写入exc ...

  8. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  9. Python 爬取CSDN博客频道

    初次接触python,写的很简单,开发工具PyCharm,python 3.4很方便 python 部分模块安装时需要其他的附属模块之类的,可以先 pip install wheel 然后可以直接下载 ...

随机推荐

  1. 8.2.2 使用Java8增强的Iterator遍历集合元素

    8.2.2 使用Java 8增强的Iterator遍历集合元素 Iterator接口方法 程序示例 Iterator仅用于遍历集合 Iterator必须依附于Collection对象 修改迭代变量的值 ...

  2. mingster.com

    Good to Great: Why Some Companies Make the Leap... and Others Don'tby Jim Collinshttp://rcm.amazon.c ...

  3. 【RxJava Demo分析】(二)Schedulers线程调度器 · Hans Zone

    用Schedulers(调度器)实现多任务(并发,Concurrency)的例子 废话不多说我们看一下有关于RxJava的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  4. HTML笔记02

    网页中的颜色有三种表示方法 颜色单词:blue.green.red.yellow 10进制表示:rgb(255,0,0).rgb(0,255,0).rgb(0,0,255) 16进制表示:#ff000 ...

  5. 造轮子系列(三): 一个简单快速的html虚拟语法树(AST)解析器

    前言 虚拟语法树(Abstract Syntax Tree, AST)是解释器/编译器进行语法分析的基础, 也是众多前端编译工具的基础工具, 比如webpack, postcss, less等. 对于 ...

  6. css实战#用css画一个中国结

    大家好!今天跟大家分享一个用 css 画中国结的教程.最终效果如下: 大家如果感兴趣可以参考我的源码:gitHub地址 首先,我们定义好画中国结需要的结构: <div class="k ...

  7. SVG 新手入门

    svg 入门新认知 一.第一步创建设置svg <svg width="100%" height="500"> </svg> 设置粗细 5 ...

  8. java爬虫-妹子图

    一,分析 1.选择入口 ​ 打开 https://www.mzitu.com/ 主页,我们发现主页有200+页图片,我们如果从首页入手,这里可能不是全部图片.这里我们打开每日更新 https://ww ...

  9. ysoserial源码结构分析

    1.前言 之前也花了几天晚上熟悉了一下commonscollections系列的构造,那么学习一下这个项目是如何设计的也挺重要,多学习大佬如何写代码应该也能对自己的代码能力有提升吧~2333 2.项目 ...

  10. 全面认识HBase架构(建议收藏)

    在网上看过很多HBaes架构相关的文章,内容深浅不一,直到发现了一篇MapR官网的文章https://mapr.com/blog/in-depth-look-hbase-architecture/#. ...