html页面的iframe的切换:

  • iframe框架在html页面:实际就是多个html页面的相互嵌套;如果存在多个,则操作对象一直停留在主文档页面;    如果需要操作子文档页面则需要实现iframe的切换操作;
  •  驱动器对象.switch_to.frame(iframe的id/name/定位的对象)如果iframe中不存在id、不存在name的属性的话,则可以通过其他方式定位该iframe ,定位到的对象直接传入到参数中即可
  • 在实际过程中,一定注意多级iframe的切换以及并级的iframe切换,这两者切换的方式是完全不同的;
  • 可以通过driver.switch_to.default_content() :切换到主文档界面  driver.switch_to.parent_frame()切换到上一级父级iframe
  • 当如果两个iframe并级存在主文档的话那么两个方法调用的结果实际是等价的
  • 注意:如果当前的iframe框架对象窗口进行关闭操作后,那么驱动器对象会回到上一级父iframe的操作窗口上;当然如果在实际开发过程中存在多级iframe而iframe关闭后不清楚其处于的状态,则可以每关闭一个iframe全部重新回到主文档iframe状态;

下拉列表框的操作:

  • 1.直接定位,直接根据option中的属性进行定位
  • 2.二次定位
  • 3.Select对象定位方式:使用该种方式需要引入模块:from selenium.webdriver.support.select import Select
  1. 需要传入一个参数,该参数必须是一个Select(下拉列表看的标签)的标签对象;
  2. select_by_index:表示的是所有option的索引,并不是对应的option中的id值;
  3. select_by_value:表示的是option中的value属性所对应的值;
  4. select_by_visiable_text:表示的是标签外的文本内容;
  5. 注意:以上三个方法执行后直接选择指定的值,不需要在进行调用click方法;
  • 4.可以通过键盘的上下键完成选择

键盘操作:如果需要操作键盘事件的话则需要导入键盘模块,键盘模块导入方式

  • from selenium.webdriver.common.keys import Keys

  • #退格操作
    get_webdriver.find_element(By.ID,'company').send_keys(Keys.BACK_SPACE*3)
    #全选
    get_webdriver.find_element(By.ID,'company').send_keys(Keys.CONTROL,"a")
    #复制
    get_webdriver.find_element(By.ID,'company').send_keys(Keys.CONTROL,"c")
    #粘贴
    get_webdriver.find_element(By.ID,'linkman').send_keys(Keys.CONTROL,"v")

   #滚动

   get_webdriver.find_element(By.NAME,value='area').send_keys(Keys.ARROW_UP*2)

鼠标操作:如果需要操作鼠标事件的话则需要导入鼠标模块,鼠标模块导入方式:

  • 单击操作、鼠标悬浮操作、双击(有些功能需要双击才能够实现)
  • #单击
    ActionChains(get_driver).click(get_driver.find_elements(By.CLASS_NAME,'c-font-normal')[0]).perform()
  • #悬浮
    print(get_driver.find_elements(By.NAME,value='tj_settingicon')[1])
    time.sleep(2)
    ActionChains(get_driver).move_to_element(get_driver.find_elements(By.NAME,value='tj_settingicon')[1]).perform()
  • #双击操作
    get_driver.find_element(By.ID,'kw').send_keys("测试")
    time.sleep(2)
    ActionChains(get_driver).double_click(get_driver.find_element(By.ID,'kw')).perform()
  • 注意:在使用鼠标事件的时候,一定要注意调用perfrom方法,如果不调用说明前面定义的动作并没有执行;

selenium的三种等待方式:在执行脚本的过程中,如果遇到页面数据过大,网络因素等情况导致元素加载过慢或者还未加载,而此时又在执行该行代码则会抛出元素无法找到等类型的异常信息;为了避免因为脚本执行过快而导致执行失败,所以会引入在脚本中进行设置脚本的执行速度

  • 1.强制等待:又称为强制休眠;该方式只能够作用于当前行的脚本的休眠操作;那么如果存在多行则需要每行进行设置休眠操作,此种方法则容易造成大量的重复代码,并且使得代码的走读性降低;直接使用python内置模块的time模块,调用sleep方法即可;该方式最大的缺点就是:影响代码的执行速度(设定的代码休眠时间不能够精确,设定过长时间则一定要等到所设定的时间,如果元素在设定时间值之前就加载完毕则浪费时间)
  • 2.隐式等待:又称为智能等待,也称之为全局等待;表示的是针对整个当前页面中的所有元素加载完毕后才会进行执行;如果加载在设定的时间之前加载完毕则后续时间不会等待直接执行;一般脚本在实际设定该部分时间范围为5-30s之间;如果加载在设定的时间内之前加载完毕则后续时间不会等待直接执行;一般脚本在实际设定该部分时间范围为5-30s之间; 调用直接通过驱动器对象调用implicitly_wait(20);作用于整个脚本生命周期;
  • 隐式等待的弊端:因为只针对的是整个页面 如果页面不同元素直接存在依赖就无法实现
  • 3.显示等待:主要是针对单个元素进行设定一定的频率刷新当前页面并检测是否存在该元素;
  • 导入模块:
  • from selenium.webdriver.support.ui import WebDriverWait
  • from selenium.webdriver.support.wait import WebDriverWait
  • 说明:ui模块中的webdiverwait就是调用support.wait中的webdriverwait
  • WebDriverWait该类需要传入四个参数:第一个参数表示的是:当前驱动器对象;第二个参数表示的是:设定刷新页面的超时时间;第三个参数表示的是刷新的频率;第四个参数表示的是:设定如果页面无法找到元素的异常类型对象,如果没有定义为默认值的话则抛出的是NosuchElementException;
  • Webdriverwait对象中只存在两个方法: until,until_not,在until和until_not两个方法中需要传入一个参数:该参数是method;method传入的对象只能够是两种:一种是匿名函数,另一种预置条件对象(excepted_conditions)
  • 简单实例:
  • 打印效果:

    如果找不到的话:

  • 说明:在实际工作中,使用隐式等待和显示等待频率是最高的;

  • python内置方法:__call__方法:表示的是对象可直接使用函数的形式进行调用方法;不需要通过对象进行调用具体的方法(相对简单方便);如果没有声明该方法则对象不可直接函数方式使用;
  • 例如:
  • a()此句代码表示的是直接调用A类中显示声明的__call__方法

显示方法的实例展示:

demo:

WebDriver API及对象识别技术的更多相关文章

  1. 转:python webdriver API 之操作测试对象

    一般来说,所有有趣的操作与页面交互都将通过 WebElement 接口,包括上一节中介绍的对象定位,以及本节中需要介绍的常对象操作.webdriver 中比较常用的操作元素的方法有下面几个: cle ...

  2. Selenium WebDriver Api 知识梳理

    之前一直没有系统的梳理WebDriver Api的相关知识,今天借此机会整理一下. 1.页面元素定位 1.1.8种常用定位方法 # id定位 driver.find_element_by_id() # ...

  3. selenium2(WebDriver) API

    selenium2(WebDriver) API 作者:Glen.He出处:http://www.cnblogs.com/puresoul/  1.1  下载selenium2.0的包 官方downl ...

  4. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  5. JedisCluster中应用的Apache Commons Pool对象池技术

    对象池技术在服务器开发上应用广泛.在各种对象池的实现中,尤其以数据库的连接池最为明显,可以说是每个服务器必须实现的部分.   apache common pool 官方文档可以参考:https://c ...

  6. 《精通Hibernate:Java对象持久化技术详解》目录

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  7. .net中对象序列化技术浅谈

    .net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...

  8. 转:python webdriver API 之 验证码问题

    对于 web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测 ...

  9. Webdriver API (二)

    (转载) 1.3 打开测试页面 对页面对测试,首先要打开被测试页面的地址(如:http://www.google.com),web driver 提供的get方法可以打开一个页面: // And no ...

  10. Selenium2+Python:Webdriver API速记手册

    由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需. 参考:虫师<Selenium2自动化测试实战>,和 ...

随机推荐

  1. 【pytest】执行测试不输出logging日志问题

    [一] 今天更新了一波pytest,4.50 -> 6.2.3.执行了一波测试发现之前的logging输出不见了. 看了下启动参数 --log-cli-level=LOG_CLI_LEVEL 加 ...

  2. 二叉树系列之Treap树

            Treap是一棵拥有键值.优先级两种权值的树 struct node{ int size;//以这个结点为根的子树的结点总数量,用于名次树 int rank;//优先级 int key ...

  3. mybatis中xml配置文件头部

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  4. 盒模型属性-width height-padding-border-margin

    宽度 width: 作用:设置可以添加元素内容的区域的宽度. 属性值:  特殊应用: • 如果一个元素不添加width 属性,默认属性值为auto,不同的元素浏览器会根据其 特点自动计算出实际宽度,例 ...

  5. 面向对象ooDay9

    精华笔记: 多态:多种形态 同一个对象被造型为不同的类型时,有不同的功能-------所有对象都是多态的(明天总结详细讲) 对象的多态:水.我.你...... 同一类型的引用在指向不同的对象时,有不同 ...

  6. [Leetcode 22]生成括号generate parentheses

    题目 给定括号对数n,生成所有可能的标准括号结果* *指不能)( https://leetcode.com/problems/generate-parentheses/ Given n pairs o ...

  7. IDEA设置编码为UTF-8编码

    IntelliJ IDEA 统一设置编码为utf-8编码 问题一: File->Settings->Editor->File Encodings 网上的方法大部分都是错的,上图的单选 ...

  8. Manage your references to .Net assemblies Dynamics 365 for Operations VS projects

    (Dynamics 365 for Operations was previously known as the New Dynamics AX) Dynamics 365 for Operation ...

  9. JavaScript 字符串的相关方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. JSTl_概述和JSTL_常用便签if

    概念: JavaServer Pages Tag Library JSP 标准标签片*是由 Apache 组织提俱的开源的免费的 jsp 标签 <标签> 作用:用于简化和替换 jsp 页面 ...