基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》

今天的韭菜格外的绿。——《丫子》
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第1张图片

首先

在Src文件夹中新建Browser.py,在Browser.py中新建Browser类,并且对WebDriver类中的常用方法进行封装,封装结果如下:基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第2张图片
其他的常用方法也是按照这个格式来封装的,这里说明一下:

  • 构造函数中的 self.driver = driver 这一步就是传递driver实例。在Browser类初始化时将外部的driver实例作为参数传递给Browser(),然后生成的browser对象就可以利用这个driver来调用WebDriver类中的方法。
  • 使用了try…except…语句,当发现WebDriverException时没有抛出异常,而是把异常信息记录到log里,如果发生了除了WebDriverException以外的其他异常不仅记录日志,还要抛出异常,中断程序,然后来调试。

但是在封装过程中,我觉得每个方法都要这么写,非常得麻烦,有大量的冗余代码,所以自然想到了利用装饰器来做这件事。

Utils中新建Decorator.py文件,编写装饰器函数logger_result(),装饰类中的方法,当方法被调用时,若运行正确,则记录返回值;若发生异常,则处理异常。
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第3张图片
因为技术所限,所以该装饰器只能装饰实例方法,无法装饰静态方法和类方法。附上测试代码:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第4张图片
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第5张图片
再回到Browser类中,用该装饰器来装饰想要装饰的方法。如果觉得一条条地去写装饰语句太麻烦,可以创建元类自动装饰该类中所有的方法:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第6张图片
嗯,因为技术所限,所以这种元类自动装饰所有方法也有个问题就是要注意装饰顺序。还好Browser类中没有过于复杂的方法,所以这种技术暂且能用…
有了自动装饰功能,就可以很顺畅地去编写封装selenium.Webdriver的方法了,而且省去了大量的手动log代码:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第7张图片
我先写了一小部分,其他方法请同学们自行编写,我们写个例子,看看效果:
在Main.py中编写如下测试代码,并运行:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第8张图片
这是日志输出:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第9张图片
下面封装最重要的 find_element() 和 find_elements() 方法,加入显示等待:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第10张图片
这2个方法接收的参数是一个定位器,这个定位器是一个二元组,第一个位置是定位方式,第二个位置是需要用到的值。请牢记这种方式,后面封装Element类和Wait类还会用到。至于定位器该怎么填,请参考前文说到的selenium/webdriver/common/by 的By类的内容:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第11张图片
如果不习惯这些写法,我们可以对其做映射,但是因为是一次性的工程,所以我就不打算做了。

还有2个参数是等待的超时时间和等待时候的轮询频率,我把这2个参数都作为可配置项写在了配置文件中。所以需要新建一个解析配置文件的方法,在Utils中新建ParseConfig.py,并新建解析配置文件的方法:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第12张图片
并在Browser.py文件中读取解析文件,获取文件中的数据:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第13张图片
这里说明一下get_element方法,其中until和until_not的语法有些特殊,接收的参数是个callable 的对象,所以上面用了lambda表达式,如果觉得看不明白的同学,可以分两步来,先定义一个callable的期望场景,再把该场景作为参数引入until/until_not,具体语法网上有很多教程,这里不赘述了。

封装完get_element,我们再在Main.py中试试:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第14张图片
注意get_element()中参数的写法,是个元组,所以需要用()括起来。

这是成功的日志输出:
在这里插入图片描述
这是因为找不到元素而失败的日志输出:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第15张图片
发现总体来说,日志还是不错的,达到了我们的要求。只不过get_element()的日志输出可读性不好,这个没关系,因为我本来也没打算要让这个方法输出日志。因为我会在后面的Element类继续封装get_element(),所以为了避免重复日志输出,我决定将get_element()和get_elements()的日志屏蔽掉。

实现起来很简单,在元类实现中加一行代码买即可:
基于 Python3 的网页自动化测试框架实现_Src/Brower _ 封装WebDriver《六》_第16张图片
到此为止,WebDriver中的常用方法封装方式已经介绍完毕,接着我们要去封装另一个重头的类——WenDriverWait。

End

欢迎关注公众号以及加群讨论,所有文章都会同步到公众号,方便大家在碎片时间阅读。
在这里插入图片描述
▲扫描二维码“识别”关注 简介:热爱生活,享受旋律!

你可能感兴趣的:(Python3自动化测试)