美文网首页
python3使用selenium上篇

python3使用selenium上篇

作者: test小星星 | 来源:发表于2018-09-25 16:35 被阅读22次

selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
想了解selenium发展史点击一下。

实例百度搜索selenium

# 导入webdriver类
from selenium import Webdriver
# 调用selenium浏览器驱动,获取浏览器句柄
driver = webdriver.Firefox()
# 通过句柄访问URL
first_url = 'http://www.baidu.com'
driver.get(first_url)
# 通过句柄控制页面元素
driver.find_element_by_id("kw").send("selenium")  # 在搜索框输入selenium
driver.find_element_by_id("su").click()  # 单击百度一下

环境搭建

1.安装python3
python下载地址:https://www.pythin.org/
2.安装selenium
cmd命令行输入:pip install selenium

cmd命令行输入:pip install selenium=指定版本号
pip show selenium 查看当前包的版本信息
3.安装浏览器驱动(WebDriver)
驱动下载地址:http://www.seleniumhq.org/download/
解压文件,将得到的.exe文件放到python目录下

元素定位

1. id定位
通过HTML元素的ID值定位:find_element_by_id("id名称")
2. name定位
通过HTML元素的name属性值定位:find_element_by_name("name名称")
3. class定位
通过HTML元素的class值定位:find_ement_by_class_name("class名称")
4. tag定位
每个一个元素本质上也是一个tag,如:<div>、<input>、<a>等
find_element_by_tag_name("input")
5. link定位
它专门用来定位文本链接:find_element_by_link_text("链接名")
6. partial link定位
parial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接。
find_element_by_partial_link_text("一个很长的文本链接")
7. XPath定位

  • 绝对路径定位
    find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
    div[2]表示当前层级下的第二个div标签
  • 元素属性定位
    find_element_by_xpath("//input[@id='id名称']")
    find_element_by_xpath("//input[@name='name名称']")
    find_element_by_xpath("//input[@class='class名称']")
    find_element_by_xpath("//*[@id='id名称']")
    find_element_by_xpath("//input[@type='submit']")
    说明://表示当前页面某个目录下, input表示定位元素的标签名,[@id="id名称"]表示这个元素的id属性值,如果不想指定标签名,则可以用星号(*)代替,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。
  • 层级与属性结合
    如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找其上一级元素,或上上级元素。
    find_element_by_xpath("//span[@class='class名称']/span/input")
  • 使用逻辑运算符
    如果一个属性不能唯一区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素
    find_element_by_xpath("//input[@id='值' and @class='值']/span/input")
  • 通过开发这工具(F12)定位元素复制xpath绝对路径

8. 常用css定位

选择器 例子 描述
.class .temp class选择器,选择class="temp"的所有元素
#id #kw id选择器,选择id="kw"的所有元素
* * 选择所有元素
element input 选择所有<input>元素
> div>input 选择父元素为<div>的所有<input>元素,父子关系
+ div+input 选择同一级紧接在<div>元素之后的所有<input>元素 ,兄弟关系
[attrbute=value] [type="submit"] 选择type="submit"的所有元素

9. 用By定位元素
针对前面介绍的8种定位方法,WebDriver还提供了另外一套写法,即统一调用find_element()方法
find_element()方法只用于定位元素,需要两个参数,第一个参数是定位的类型,第二个参数是定位的具体方式,在使用By之前需要导入By类

# 导入By
from selenium.webdriver.common.by import By
# id定位
find_element(By.ID, "id值")
# name属性定位
find_element(By.NAME, "name值")
# class属性定位
find_element(By.CLASS_NAME, "class值")
# 标签定位
find_element(By.TAG_NAME, "input")
#定位链接
find_element(By.LINK_TEXT, "新闻")
# 定位长链接
find_element(By.PARTIAL_LINK_TEXT, "新")
# xpath定位
find_element(By.XPATH, "//*[@class='值']")
# css定位
find_element(By.CSS_SELECTOR, "span.class值>input#值")

10. 定位一组元素
定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多加了个s表示复数。
用于场景:批量操作元素。
例如,勾选页面上所有的复选框
先获取一组元素,再从这组对象中过滤出需要操作的元素。

# 选择页面上所有的tag_name为input的元素
inputs=driver.find_elements_by_tag_name('input')
# 然后从中过滤出type为checkbox的元素,单击勾选
fro input in inputs:
    if input.get_attribute('type')== 'chexkbox':
        input.click()

操作页面的方法

1. 简单的元素操作

  • back()               后退
  • forward()              前进
  • refresh()               刷新(F5)
  • set_window_size(480*800)      设置浏览器窗口大小
  • maximize_window()         全屏显示
  • clear()               清除文本
  • send_keys("值")           模拟按键输入
  • click()               单机元素
  • submit()              用于提交表单,相当于“回车”键的操作
  • quit()               关闭所有窗口
  • close()              关闭当前窗口

2. 获取页面信息

  • size               返回元素的尺寸
  • text               获取元素的文本内容
  • get_attribute(name)        获取属性值
  • is_displayed           判断元素是否可见 (True可见,False不可见)
  • title               获取当前页面的标题
  • current_url            获得当前页面的URL

3. 鼠标事件

  • perform()        执行所有ActionChains中存储的行为,可以理解成是对整个操作的提交动作。
  • context_click()      右击
  • double_click()      双击
  • drag_and_drop      拖动
  • move_to_element()    鼠标悬停
    实例模拟右击
# 导入提供鼠标操作的ActionChains类    
from selenium webdriver import ActionChains
# 定位要右击的元素
youji=driver.find_element_by_id("xx")
# 调用ActionChains()类,将浏览器驱动driver作为参数传入
# context_click()方法用于模拟鼠标右击操作
ActionChains(driver).context_click(youji).perform()

4. 键盘事件

  • send_keys(Keys.BACK_SPACE)     删除键(BackSpace)
  • send_keys(Keys.SPACE)        空格键(Space)
  • send_keys(Keys.TAB)         制表键(Tab)
  • send_keys(keys.ESCAPE)       回退键(Esc)
  • send_keys(Keys.ENTER)        回车键(Enter)
  • send_keys(Keys.CONTROL,'a')     全选(Ctrl+A)
  • send_keys(Keys.CONTROL,'c')     复制(Ctrl+C)
  • send_keys(Keys.F1)          键盘F1

接下篇

相关文章

网友评论

      本文标题:python3使用selenium上篇

      本文链接:https://www.haomeiwen.com/subject/bcqloftx.html