用Pageobject的方式使用Webdriver

发表于:2016-10-17 13:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:文 字    来源:51Testing软件测试网原创

  一、代码引用结构
  S001:主要调用webdriver中以下文件及类,这些类是webdriver运行的基本依赖。Public模块对此类依赖进行了再次封装。
import selenium.webdriver as webdriver
import selenium.webdriver.common.by as by
import selenium.webdriver.support.wait as Wait
import selenium.webdriver.support.expected_conditions as Expect
from selenium.webdriver.common.action_chains import ActionChains
  S002:requests包主要供调用api或者执行web-api(浏览器中执行的请求)使用。extend模块实现了其再次封装以及实例的实现。
  S003:自定义了日志输出的模式,在public模块中实现了相类的类。
  S004:subprocess模拟调用ffmpeg.exe执行命令,实现录像的操作。在public模块中实现了相关的类。
  二、具体模块的实现
  S-p001:public模块主要包括以下几个文件
  S-t001:common文件主要包括以下方法
  def log(words, filename=time.strftime('%Y-%m-%d') + ".log", mode="a"):
  写自定义日志文件
  def to_request_cookies(webdriver_cookies):
  将webdriver cookies转换成requests cookies
  S-t002:mydriver文件主要包括以下方法等等。
  其主要目的是增强查找对象的可靠性,以及在webdriver操作层对可重复使用的方法进行公共抽象。
  def wait_find_element(self, tupleBy, time = 10, hlight=False):
  尝试5次等待寻找对象,且每次对象的超时时间为10秒,如果hlight为true则高亮对象。找到对象则返回该对象。
  def wait_find_elements(self, tupleBy, time = 10, hlight=False):
  尝试5次等待寻找多个对象,且每次对象的超时时间为10秒,如果hlight为true则高亮对象。找到对象则返回该对象list。
  def wait_subchild_element(self,father_element,tupleBy, times = 10, hlight=False):
  多层对象的查找
  def wait_get_style_display(self,typleBy):
  获取对象的style中的display值
  def wait_find_element_mousover(self,tupleBy):
  将光标移动到对象中
  下例展示了wait_find_element的实现
def wait_find_element(self, tupleBy, time = 10, hlight=False):
ok = False
i = 1
while (i <= 5):
try:
wait_element = Wait.WebDriverWait(self.maindr, time).until(lambda maindr: maindr.find_element(tupleBy[0], tupleBy[1]))
com.log("find element   ok  " + tupleBy[0] + "     " + tupleBy[1])
if hlight:
self.high_light(wait_element)
return wait_element
except Exception as e:
if (i == 5):
com.log("find element   fail  " + tupleBy[0] + "     " + tupleBy[1] + "     " + str(e))
finally:
i = i + 1
  S-t003:const即常用常量
  如,HOST = "https://test.myfoscam.com"
  S-t004:在subprocess中执行ffmepg命令
def start(self,filename):开始录像
self.save_filename = self.record_dir() + "\\"+filename+".avi"
self.delete_current_record()
cmd = "%s -draw_mouse 1 -offset_x 0 -offset_y 0 -f GDIgrab -i desktop %s" %(self.get_ffmpeg_path(),self.save_filename)
# print "cmd = %s" % cmd
self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,universal_newlines=True)
def stop(self):
停止录像
  S-p002:pageobject模块用以管理待操作对象
  S-t005:pageobject模块用以页面的方式来管理操作的对象。并且pageobject模块,调用S-t002中的wait_find_element方法用以驱动相关方法。其主要划分方法为,查找方式为类的属性、操作的过程为sub方法,检查的方式为check方法。其主要目的,是方便对象被修改后易于维护,且易用被其它地方调用的时候能够重用。
  其具体实现如下例所示:
   ... ...
   查看全文内容,请点击下载:http://www.51testing.com/html/00/n-3712900.html
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号