Selenium的PageObject设计模式

Posted wangyawen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium的PageObject设计模式相关的知识,希望对你有一定的参考价值。

技术图片

 

 

一、代码与数据分离的方式(一)

1.excel做数据源时表格设计

技术图片

 

 

2.读取出excel文件内元素组装成数组形式返回

 1 conf = ConfigUtils()
 2 elements_path=conf.get_elements_url
 3 
 4 class ElementExcelData:
 5     def __init__(self, sheet_name, element_path=elements_path):
 6         self.element_path = element_path
 7         # 打开excel文件
 8         self.workbook = xlrd.open_workbook(self.element_path)
 9         # sheet页名
10         self.sheet = self.workbook.sheet_by_name(sheet_name)
11         # 获取行数
12         self.row_count = self.sheet.nrows
13 
14     def get_element_info(self):
15         elements_info={}
16         for i in range(1, self.row_count):
17             element_info = {}
18             element_info[element_name] = self.sheet.cell_value(i, 1)
19             element_info[locator_type] = self.sheet.cell_value(i, 3)
20             element_info[locator_value] = self.sheet.cell_value(i, 4)
21             element_info[timeout] = int(self.sheet.cell_value(i, 5))
22             elements_info[self.sheet.cell_value(i, 0)] = element_info
23         return elements_info
24 
25 
26 def get_page_info(sheet_name):
27     element_data = ElementExcelData(sheet_name)
28     elements = element_data.get_element_info()
29     return elements

3.读取excel为数据源

 1 # 读取excel为数据源
 2 elements = get_page_info(Login)
 3 
 4 class LoginPage(BasePage):
 5     def __init__(self,driver):
 6         super().__init__(driver)
 7 
 8         # 方式三:
 9         self.username_inputbox = elements[username_inputbox]
10         self.password_inputbox = elements[password_inputbox]
11         self.login_button = elements[login_button]

 

 

二、代码与数据分离的方式(二)

1.yaml文件做数据源时.yml设计方式

技术图片

 

 2.读取出yaml文件内元素

 1 conf = ConfigUtils()
 2 elements_yaml_url=conf.get_elements_yaml_url
 3 
 4 class ElementYamlData:
 5     def __init__(self, sheet_name, element_path=elements_yaml_url):
 6         self.sheet_name =sheet_name
 7         # 打开yaml文件
 8         self.file = open(element_path, r, encoding=utf-8)
 9         # 读出yaml文件全部内容
10         self.yaml_content = self.file.read()
11 
12     def read_yaml(self):
13         yaml_list = yaml.load(self.yaml_content,Loader=yaml.FullLoader)
14         elements = yaml_list[self.sheet_name]
15         return elements

 

3.读取yaml文件为数据源

 1 # 读取yaml文件为数据源
 2 element_infos = ElementYamlData(LoginPage)
 3 elements=element_infos.read_yaml()
 4 
 5 class LoginPage(BasePage):
 6     def __init__(self,driver):
 7         super().__init__(driver)
 8 
 9         # 方式三:
10         self.username_inputbox = elements[username_inputbox]
11         self.password_inputbox = elements[password_inputbox]
12         self.login_button = elements[login_button]

 

以上是关于Selenium的PageObject设计模式的主要内容,如果未能解决你的问题,请参考以下文章

Selenium的PageObject设计模式

selenium(10)-PageObject模式的解释

selenium的PageObject设计模式

Selenium系列(二十) - PageObject模式的详细介绍

Selenium+PageObject+Java实现测试用例

Selenium_Page Object设计模式