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. 【Delphi11】「Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite.v17.0分享」

    [Delphi11]转存或下载后将后缀名".exe"删除即可,或者直接右击解压缩也可.「Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite. ...

  2. image test

    png: jpeg: jpg: gif:

  3. Android studio 使用dialog提示信息

    package com.example.androidtest2; import androidx.appcompat.app.AlertDialog;import androidx.appcompa ...

  4. 记一次线上DB被打挂

    这周刚新上了需求,在慢慢写代码的时候,突然报警群的消息多了,组长让我看看咋回事. 一开始没当回事,因为faas任务的错误日志一直很多,但是发现新的日志和以前大不相同,显示的是上游faas实例的连接被m ...

  5. CSS 常用样式-文字三属性

    颜色 color: 作用:给文字设置颜色. 属性名 k :color 属性值 v :颜色名.颜色值. 颜色名: 颜色名就是使用颜色的英文单词进行表示. 需要记忆一些最常用的颜色名: 更多的颜色名可以通 ...

  6. linux中安装启动postgresql教程

    安装: 官网地址:https://www.postgresql.org 选择下载版本: https://www.postgresql.org/ftp/source 下载方式: wget https:/ ...

  7. 位运算与MOD快速幂详细知识点

    最近写的一些题目设计到了数论的取模 如下题 链接:https://ac.nowcoder.com/acm/contest/3003/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...

  8. JS实现一个函数getType获取所有的数据类型

    1 function getType(obj) { 2 if (obj === null) { 3 return String(obj) 4 } 5 const toType = (obj) => ...

  9. vscode工程目录文件及文件夹摘选

    在工程工作区下新建一个.vscode 文件夹中并新建一个名为"settings.json"的文件,然后在 settings.json 中输入如下内容: { "search ...

  10. 更新kubeadm kubernets平台证书

    证书过期失效: Unable to connect to the server: x509: certificate has expired or is not yet valid 更新证书: 1.查 ...