一、代码引用结构
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内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。