最近项目要用Python来写自动化,我根据之前现有的Ruby框架来重写。发现一个最大的区别,全局变量,Ruby是可以全工程可见,而Python只能在当前py文件内可见。其实在开发中我们都会要求尽量少用全局变量,以避免带来的不可预见的问题。但是在做selenium框架时,driver对象的必须全工程访问的。所以按照之前ruby的写法,$driver,一处声明,全局可用就不行了。
driver对象的产生是封装在浏览器启动的方法中,我们在case中调用了这个启动方法,也就产生了一个driver对象。而这个driver对象在其他很多py文件里都要用到,即使这里把driver对象作为一个全局变量,其他py文件也没法访问。在一个common类里,设置一个类变量,driver,再创建一个set_driver方法,将启动浏览器获取的driver赋值给common的类变量driver。
class Common:
driver=None #类变量driver,全局其他地方通过这个类变量来访问driver对象
def set_driver(self,dr):
Common.driver=dr
return Common.driver
在运行case时启动浏览器和给common的driver类变量赋值
self.dr=Common().starting() #启动浏览器产生driver对象
Common().set_driver(self.dr) #给common的driver类变量赋值
在其他地方获取当前driver,如ElementBase基础类中:
from *****.common import Common #先导入common模块
..........
def elements(self):
return Common.driver.find_elements_by_xpath(*****) #Common.driver访问当前driver对象