selenium 数据驱动框架自动化从0到1–4
前几篇我们把模块都封装了,但还是没有实现页面元素表达式和代码完全分离,如果页面有改动,我们需要花大量时间来维护,于是这篇我们把页面元素表达式提取出来放在一个配置文件里。
在config包下创建一个test_page_expression.ini 配置文件。文件内容如下: 把所有页面的页面元素表达式都提取出来统一管理。
[login_page] #登录页面元素表达式
#获取frame
lp_frame = xpath>//iframe[contains(@id,'x-URS-iframe')]
#获取登录名文本框
lp_user_name = xpath>//input[@name="email"]
#获取密码文本框
lp_password = xpath>//input[@name="password"]
#获取登录按钮
lp_login_button = id>dologin
[home_page] #home页面元素表达式
#获取通信录按钮
hp_address_book =xpath>//div[text()="通讯录"]
[add_contact_person_page] #添加联系人页面元素表达式
#获取添加联系人按钮
cp_add_contact_person_button = xpath>//span[text()="新建联系人"]
#获取添加联系人姓名文本框
cp_contact_person_name = xpath>//a[@title="编辑详细姓名"]/preceding-sibling::div/input
#获取添加联系人电子邮件文本框
cp_contact_person_email = xpath>//div[@id="iaddress_MAIL_wrap"]//dd/div//input
#获取是否是星标朋友按钮
cp_is_star = xpath>//span[text()="设为星标联系人"]/preceding-sibling::span/b
#获取联系人电话文本框
cp_contact_person_phon = xpath>//div[@id="iaddress_TEL_wrap"]//dd/div//input
#获取联系人备注文本框
cp_contact_person_coment =xpath>//textarea[@id="input_DETAIL"]
#获取保存按钮
cp_contact_person_save_button = xpath>//span[text()="确 定"]
有了配置,我们还得有地址,地址是常量,所以我们重新在config下创建一个常量文件var_config_path.py,代码如下:
#encoding = utf-8
import os
#获取当前文件的绝对路径的上层文件路径的上层文件路径
parent_path =os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(parent_path)
#获取配置文件的绝对路径
test_page_expression_path = os.path.join(parent_path,'config\\test_page_expression.ini')
print(test_page_expression_path)
有了文件,有了地址,我们还得把文件内容读取出来,于是就有了解析文件工具,在util包下创建一个config_file_parse.py 文件的解析工具,代码如下,以后工程可直接用
#encoding = utf-8
from Configparser import ConfigParser #导入配置文件解析包
from config.var_config_path import test_page_expression_path #导入文件地址
class ConfigParseFile(object):
def __init__(self):
self.cp = ConfigParser() #创建文件解析实例
self.cp.read(test_page_expression_path,encoding = 'utf-8') #读文件内容
def get_items_section(self,sectionName):
# 获取配置文件中指定section下的所有option键值对,以字典的方式返回
'''
使用self.cp.items(sectionName)方法获取的配置文件中的option内容均被转换成小写
例如:loginPage.frame 被转换成了loginpage.frame
'''
options = dict(self.cp.items(sectionName))
return options
def get_option_value(self,sectionName,optionName):
# 获取指定section下的指定option的值
value = self.cp.get(sectionName,optionName)
return value
if __name__ == '__main__':
pc = ConfigParseFile()
print(pc.get_items_section('login_page'))
print(pc.get_option_value('login_page','lp_frame'))
print(pc.get_option_value('login_page', 'lp_user_name'))
print(pc.get_option_value('login_page', 'lp_password'))
print(pc.get_option_value('login_page', 'lp_login_button'))
总结
现在元素表达式提取出来了,但还没应用,于是要修改前面我们写的涉及表达式这块的3个页面代码。下篇我们继续。