结合这两种方法对代码做二次封装,可以提升脚本性能

例:

#coding:utf-8

#封装元素方法
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import *
from selenium.webdriver.support import expected_conditions as EC
import time
#加入下面三行代码 在python2中就不会出现乱码问题
import sys
reload(sys)
sys.setdefaultencoding('utf-8') class Base():
def __init__(self,driver):
self.driver=driver #查找元素
def find_element(self,locator):#locator参数是定位方式,如("id", "kw"),把两个参数合并为一个,*号是把两个参数分开传值
element=WebDriverWait(self.driver,20,0.5).until(lambda x:x.find_element(*locator))
print(element)
return element
#判断元素文本
def is_text_in_element(self,locator,text):
try:
WebDriverWait(self.driver,20,0.5).until(EC.text_to_be_present_in_element(locator,text))
return True
except TimeoutException:
return False
#判断元素的value属性
def is_value_element(self,locator,text):
try:
WebDriverWait(self.driver,20,0.5).until(EC.text_to_be_present_in_element_value(locator,text))
return True
except:
return False #判断元素是否被定位到
def is_exists(self,locator):
try:
WebDriverWait(self.driver,20,0.5).until(EC.presence_of_element_located(locator))#不需要*,这里跟*locator不是一个参数
return True
except:
return False
#判断元素是否已经不存在,不存在了返回True,还存在就返回False
def element_is_disappeared(self,locator,timeout=30):
is_disappeared=WebDriverWait(self.driver,timeout,1,(ElementNotVisibleException)).until_not(lambda x:x.find_element(*locator).is_displayed())
print is_disappeared #封装一个send_keys
def send_keys(self,locator,text):
self.find_element(locator).send_keys(text) #封装一个click
def click(self,locator):
self.find_element(locator).click()
# #封装一个text
# def get_text(self,locator,text):
# return self.find_element(locator,text).text #运行主函数
if __name__=='__main__':
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#实例化
base=Base(driver)
#定位输入框
input_loc=("id","kw")
#通过实例调用find_element来发送
base.send_keys(input_loc,"selenium")
#点击按钮
button=("css selector","#su")
base.click(button)
print base.is_text_in_element(("link text", "地图"), "地图")
time.sleep(3)
driver.quit()

webdriver+expected_conditions二次封装的更多相关文章

  1. selenium + python自动化测试unittest框架学习(五)webdriver的二次封装

    因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<se ...

  2. python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解

    1.python mysql  redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...

  3. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  4. python+selenium十:基于原生selenium的二次封装

    from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...

  5. Selenium二次封装-Python版本

    from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...

  6. python+selenium十:selenium的二次封装

    python+selenium十:基于原生selenium的二次封装   from selenium import webdriverfrom selenium.webdriver.support.w ...

  7. APP自动化针对PO模式进行二次封装之basepage

    APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...

  8. web自动化针对PO模式进行二次封装之basepage

    在PO模式当中,我们做到了页面对象与测试用例的分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作,可以封装起来,并可以在基本操作当中加上日志和异常截图的处理.比如说我们在查 ...

  9. Python_selenium二次封装selenium的几个方法

    Python_selenium二次封装selenium的几个方法 将常用的几个webdriver方法封装到自己写的一个类中去,此实例中是将"浏览器后退.浏览器前进.打开站点和关闭浏览器&qu ...

随机推荐

  1. HTTP1.0/1.1/2.0特性对比_转

    转自:HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比  https://segmentfault.com/a/1190000013028798 HTTP1.0 早先1.0的HTTP版本, ...

  2. centos下软件安装

    1. vim安装 yum -y install vim*

  3. go channel例子

    channel初步认识: package main import "fmt" import "time" func main() { c := make(cha ...

  4. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql

  5. 重装MAC系统 “安装器有效负载签名检查失败” 解决方法

    部分朋友反应安装macOS Sierra的时候会提示:"安装器有效负载签名检查失败" 其实这是系统时间不对的原因,把系统时间修改正确就好了. 1,如果电脑正常运行,那么进系统偏好设 ...

  6. JQ 获取窗体的高度

    alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(document).height()); //浏览器时下窗口文档的高度 alert($(docum ...

  7. 【转】JMeter完成一个java请求的压测

    JMeter完成java请求的压力测试详解以及问题总结 原文地址:http://www.cnblogs.com/zhaoxd07/p/4895224.html    作者:KK_Yolanda 这篇文 ...

  8. 【转】web前端到底怎么学?干货资料!

    一般据我经验,在喜欢并且决定和她恋爱之前,我都会做一下充分准备和调查,有必要了解和研究清楚 ‘她’ 的几个特性和习惯 web前端的基本工作职责 和基础技能(要清楚) web前端的分类和门派(简要概述, ...

  9. 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel

    http://blog.csdn.net/wirelessqa/article/details/8581652 android:sharedUserId 当APK安装的时候,userid这个标志就会产 ...

  10. 解决Ajax跨域问题:Origin http://127.0.0.1:8080 is not allowed by Access-Control-Allow-Origin.

    在服务端上设置一下header,如response.header("Access-Control-Allow-Origin","*");