不多说,直接看代码如下:

#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities class webutils(): def __init__(self, browser='firefox'):
'''
:param browser: 浏览器对象
:return:
'''
if browser == "firefox" :
driver = webdriver.Firefox()
elif browser == "chrome":
driver = webdriver.Chrome()
elif browser == "ie" :
DesiredCapabilities.INTERNETEXPLORER['ignoreProtectedModeSettings'] = True
driver = webdriver.Ie("../resources/drivers/IEDriverServer.exe")
elif browser == "phantomjs":
driver = webdriver.PhantomJS()
try:
self.driver = driver
except Exception:
raise NameError("Not found this browser,You can enter 'firefox', 'chrome', 'ie' or 'phantomjs'.") def getElement(self,by,value):
''' :param by: 查找元素的方式
:param value: 文本值
:return: 查找到的元素
'''
if by=="id":
return self.driver.find_element_by_id(value)
elif by=="class":
return self.driver.find_element_by_class_name(value)
elif by=="name":
return self.driver.find_element_by_name(value)
elif by=="css":
return self.driver.find_element_by_css_selector(value)
elif by=="linktext":
return self.driver.find_element_by_link_text(value)
elif by=="partcialtext":
return self.driver.find_element_by_partial_link_text(value)
elif by=="tag":
return self.driver.find_element_by_tag_name(value)
elif by=='xpath':
return self.driver.find_element_by_xpath(value)
elif by=='js'or by=="jquery":
return self.ExcuteJs(value)
else:
print "请输入适合的查找元素方式。。。" def ExcuteJs(self,js):
''' :param js: js查找元素方式,或jQuery
:return: 找到元素
'''
self.driver.execute_script(js)
def SetTextBox(self,text,by,value):
'''
:param text: 设置文本框的值
:param by: 查找元素的方式
:param value: 文本值
:return:
'''
elemet=getElement(by,value)
self.driver.execute_script("arguments[0].innerHTML = \"" + text + "\"",elment) def getTextBox(self,by,value):
'''
:param by: 查找元素的方式
:param value: 文本值
:return: 返回富文本框的值
'''
elment=getElement(by,value)
return self.driver.execute_script("arguments[0].innerHTML()",elment) def InputByJs(self,by,value):
'''
:param by: 查找元素的方式
:param value: 文本值
:return:
'''
elment=getElement(by,value)
self.driver.execute_script("arguments[0].value=\""+values+"\"",elment) def scrollToElement(self,by,value):
'''
:param by: 查找元素的方式
:param value: 文本值
:return:
'''
elment=getElement(by,value)
self.driver.execute_script("arguments[0].scrollIntoViewIfNeeded(true);",elment) def SwitchWindow_Two(self):
'''
适用于两个窗口的切换
:return:
'''
CurrentHandle=self.driver.current_window_handle
handles=self.driver.window_handles
for handle in handles:
if handle==CurrentHandle:
continue
else:
self.driver._switch_to.window(handle) def SwitchWindow_By_Tltle(self,Title):
'''
:param Title: 浏览器窗口标题
:return:
'''
flag=False
CurrentHandle=self.driver.current_window_handle
handles=self.driver.window_handles
for handle in handles:
if handle==CurrentHandle:
continue
else:
self.driver.switch_to_window(handle)
if Title in self.driver.title:
flag=True
return flag
return flag def SwitchWindow_By_Url(self,url):
'''
:param url: 需要切换窗口的url
:return:
'''
flag=False
CurrentHandle=self.driver.current_window_handle
handles=self.driver.window_handles
for handle in handles:
self.driver.switch_to_window(handle)
if url in self.driver.current_url:
flag=True
return flag
return flag def max_window(self):
'''
:return: 最大化窗口
'''
self.driver.maximize_window() def getUrl(self,url):
'''
:param url: 转向地址
:return:
'''
self.driver.get(url) def wait(self,seconds):
'''
:param seconds: 等待时间
:return:
'''
self.driver.implicitly_wait(seconds) def Close(self):
'''
:return: 关闭窗口
'''
self.driver.close() def Quit(self):
'''
:return: 退出浏览器
'''
self.driver.quit() def find_element(self,element):
"""
Judge element positioning way, and returns the element. Usage:
driver.find_element 此为元组(id,kw),此方法为PageObject模式准备方法
"""
by = element[0]
value = element[1] if by == "id":
return self.driver.find_element_by_id(value)
elif by == "name":
return self.driver.find_element_by_name(value)
elif by == "class":
return self.driver.find_element_by_class_name(value)
elif by == "text":
return self.driver.find_element_by_link_text(value)
elif by == "text_part":
return self.driver.find_element_by_partial_link_text(value)
elif by == "xpath":
return self.driver.find_element_by_xpath(value)
elif by == "css":
return self.driver.find_element_by_css_selector(value)
else:
raise NameError("Please enter the correct targeting elements,'id','name','class','text','xpath','css'.") def wait_element(self, element, seconds=5):
"""
等待元素在指定的时间类出现
:param element: 元素的定位表达式
:param seconds: 等待的时间
:return:
"""
by = element[0]
value = element[1] if by == "id":
WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.ID, value)))
elif by == "name":
WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.NAME, value)))
elif by == "class":
WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.CLASS_NAME, value)))
elif by == "text":
WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.LINK_TEXT, value)))
elif by == "xpath":
WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.XPATH, value)))
elif by == "css":
WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.CSS_SELECTOR, value)))
else:
raise NameError("Please enter the correct targeting elements,'id','name','class','text','xpaht','css'.") def Send_Keys(self,element,value):
'''
:param element: 元素的定位表达式
:param value: 输入值
:return:
'''
self.wait_element(element)
self.find_element(element).clear()
self.find_element(element).send_keys(value) def Click(self,element):
'''
功能:点击
:param element: 元素的定位表达式
:return:
'''
self.wait_element(element)
self.find_element(element).click() def Right_Click(self,element):
'''
功能:右击
:param element: 元素的定位表达式
:return:
'''
self.wait_element()
ActionChains.context_click(self.find_element(element)).perform() def MoveToElement(self,element):
'''
功能:移动到元素
:param element: 元素的定位表达式
:return:
'''
self.wait_element(element)
ActionChains.move_to_element(self.find_element(element)).perform() def double_click(self,element):
'''
功能:双击元素
:param element: 元素的定位表达式
:return:
'''
self.wait_element(element)
ActionChains.double_click(self.find_element(element)).perform() def drag_and_drop(self,element):
'''
功能:拖拽元素
:param element: 元素的表达式
:return:
'''
self.wait_element(element)
ActionChains.drag_and_drop(self.find_element(element)).perform() def back(self):
'''
功能:返回
:return:
'''
self.driver.back() def forward(self,element):
''' :param element: 元素的表达式
:return:
''' self.driver.forward() def get_attribute(self, element, attribute):
"""
功能:得到元素的属性值
:param element: 元素表达式
:param attribute: 属性名称
:return:
"""
self.wait_element(element)
return self.find_element(element).get_attribute(attribute) def get_text(self, element):
""" :param element: 元素表达式
:return: 返回的是元素的文本值
""" self.wait_element(element)
return self.find_element(element).text def get_display(self, element):
"""
功能:判断元素是否显示
:param element: 元素表达式
:return:
""" self.wait_element(element)
return self.find_element(element).is_displayed() def get_title(self):
"""
功能:得到浏览器的标题
:return:
"""
return self.driver.title def get_url(self):
"""
功能:得到浏览器的url
:return:
"""
return self.driver.current_url def get_screenshot(self, file_path):
"""
功能:截图并保存
:param file_path: 文件路径
:return:
"""
self.driver.get_screenshot_as_file(file_path) def submit(self, element):
"""
功能:提交特定的表单
:param element: 元素表达式
:return:
"""
self.wait_element(element)
self.find_element(element).submit() def switch_to_frame(self, element):
"""
功能:切换到特定的frame
:param element: 元素的表达式
:return:
"""
self.wait_element(element)
self.driver._switch_to_frame(self.find_element(element)) def switch_to_frame_out(self):
"""
功能:切换道默认的上下文
:return:
"""
self.driver.switch_to.default_content() def F5(self):
'''
功能:刷新页面
:return:
'''
self.driver.refresh() def accept_alert(self):
"""
功能:确认按钮
:return:
"""
self.driver.switch_to.alert.accept() def dismiss_alert(self):
"""
功能:对话框取消
:return:
"""
self.driver.switch_to.alert.dismiss() def Print(self):
return ''

自动化测试框架中关于selenium api的二次封装的更多相关文章

  1. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  2. Robot Framework自动化测试(三)---Selenium API

    Robot  Framework  Selenium  API 说明: 此文档只是将最常用的UI 操作列出.更多方法请查找selenium 关键字库. 一.浏览器驱动 通过不同的浏览器执行脚本. Op ...

  3. 在Winform混合式框架中整合外部API接口的调用

    在我们常规的业务处理中,一般内部处理的接口多数都是以数据库相关的,基于混合式开发的Winform开发框架,虽然在客户端调用的时候,一般选择也是基于Web API的调用,不过后端我们可能不仅仅是针对我们 ...

  4. 介绍MFC框架中涉及到的设计模式(二)

    接着上一篇<介绍MFC框架中涉及到的设计模式(一)>介绍 单例模式(Singleton Pattern) 单例模式是一种经常使用的软件设计模式.在它的核心结构中仅仅包括一个被称为单例类的特 ...

  5. Selenium API(二)

    1.定位一组元素 WebDriver提供了8种定位一组元素的方法. driver.find_elements_by_css_selector() driver.find_elements_by_tag ...

  6. 项目实践之工作流引擎基本文档!Activiti工作流框架中流程引擎API和服务详解

    流程引擎的API和服务 流程引擎API(ProcessEngine API)是与Activiti打交道的最常用方式 Activiti从ProcessEngine开始.在ProcessEngine中,可 ...

  7. Spring框架中的aop操作之二 通过配置文件实现增强

    aop表达式写法 配置文件代码: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  8. Java中常用的API(二)——String

    在第一节中我们介绍了Object类的方法以及操作,那么这一节,我们将介绍一个新的类:String. String类是我们经常使用的类,应用十分广泛.同时,String类中封装了一系列的方法,非常常用, ...

  9. 《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)

    1.简介 页面对象模型(Page Object Model)在Selenium Webdriver自动化测试中使用非常流行和受欢迎,作为自动化测试工程师应该至少听说过POM这个概念.本篇介绍POM的简 ...

随机推荐

  1. Andriod学习笔记 - 参考

    Andriod学习笔记 - 参考 自定义实现圆形播放进度条(android,飞一般的感觉) 盘点Android开发者必备的十大开发工具

  2. Paragraph 对象'代表所选内容、范围或文档中的一个段落。Paragraph 对象是 Paragraphs 集合的一个成员。Paragraphs 集合包含所选内容、范围或文档中的所有段落。

    Paragraph 对象'代表所选内容.范围或文档中的一个段落.Paragraph 对象是 Paragraphs 集合的一个成员.Paragraphs 集合包含所选内容.范围或文档中的所有段落. 方法 ...

  3. Unity3d 开发之 ulua 坑的总结

    相同的 lua 代码在安卓上能正常运行,但在 IOS 上可能不会正常运行而导致报红,崩溃等,我在使用 lua 编程时遇到的一些坑总结如下: 1. File.ReadAllText, 诸如以下代码在 i ...

  4. HTML 5终于定稿,八年后我们再一次谈谈怎么改变世界

    我们第一次谈论 HTML5 要改变世界大概是因为乔布斯,他坚持在 iOS 上不兼容 Flash,在 Adobe 统治多媒体开发的那个年代,这需要付出极大的勇气.这么多年过去了,虽然所有人都在谈论 HT ...

  5. Spark1.3.0安装

    之前在用Hadoop写ML算法的时候就隐约感觉Hadoop实在是不适合ML这些比较复杂的算法.记得当时写完kmeans后,发现每个job完成后都需要将结果放在HDFS中,然后下次迭代的时候再从文件中读 ...

  6. 用OpenSSL生成自签名证书在IIS上搭建Https站点(用于iOS的https访问)

    前提: 先安装openssl,安装有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.这里推荐第一种. 安装包:http://slproweb.com/products/ ...

  7. java学习(二)--excel导出

    public static String writeFile(String fileName, String[][] content) { WritableWorkbook wwb = null; S ...

  8. 数据库 Mysql事务详解

    Mysql事务 mysql的事务默认是自动提交的,也就是你提交一个query,他就直接执行!我们可以通过 禁止自动提交 开启自动提交 //mysql事务 #include <stdio.h> ...

  9. ARM处理器简介

    参考: http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php 1.ARM核演变图 2.AR ...

  10. 安卓 handler解析

    参考: 1.http://www.2cto.com/kf/201302/190591.html(安卓更新UI的两种方式,handler,Activity.runOnUIThread()) 2.http ...