zoukankan      html  css  js  c++  java
  • python+selenium之悠悠博客学习笔记

    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)
    
  • 相关阅读:
    Markdown基本语法
    Hexo 集成 Gitalk 评论系统
    hexo添加百度统计
    tf.nn.softmax
    tf.InteractiveSession()与tf.Session()
    归一化、标准化、正则化的区别
    感受野的概念
    CNN中的low-level feature 与high-level feature
    安装vncserver后导致Ubuntu循环登录进入不了桌面的问题原因及解决办法
    python3 + Tensorflow + Faster R-CNN训练自己的数据
  • 原文地址:https://www.cnblogs.com/xuelong3/p/7781411.html
Copyright © 2011-2022 走看看