selenium 数据驱动框架自动化从0到1--5

selenium 数据驱动框架自动化从0到1–5

上一篇我们把页面元素的元素表达式提取出放在了一个配置文件里,也封装了解析文件的工具,于是我们这篇就继续改造哪3个涉及页面元素表达式的页面。代码如下:


一,登录页面元素原封装代码如下

#encoding = utf-8

from util.get_object_map import *  #导入工具

class LoginPage(object):
    def __init__(self,driver):  #构造方法初始化
        self.driver = driver

    def switch_frame(self):
        try:
            #获取frame页面元素对象
            frame = get_element(self.driver,'xpath',"//iframe[contains(@id,'x-URS-iframe')]")
            self.driver.switch_to.frame(frame)  #切换到frame页面
        except Exception as e:
            raise e
    def switch_default_frame(self):
        try:
            self.driver.switch_to.default_content()   #切换到默认的frame页面
        except Exception as e:
            raise e

    def user_name_obj(self):
        try:
            #获取登录页面的用户名输入框元素对象,并返回给调用者
            element = get_element(self.driver, 'xpath', '//input[@name="email"]')
            return element
        except Exception as e:
            raise e

    def password_obj(self):
        try:
            # 获取登录页面的密码输入框元素对象,并返回给调用者
            element = get_element(self.driver,'xpath','//input[@name="password"]')
            return element
        except Exception as e:
            raise e

    def login_button_obj(self):
        try:
            # 获取登录页面的登录按钮元素对象,并返回给调用者
            element = get_element(self.driver,'id','dologin')
            return element
        except Exception as e:
            raise e

if __name__ == '__main__':
    from util.open_browser import *

    driver = OpenBrowser()   #实例化启动浏览器对象
    login = LoginPage(driver)  #实例化登录页面对象
    login.switch_frame()   #切换到frame页面
    login.user_name_obj().send_keys('abc_123456qwe')  #用户名输入
    login.password_obj().send_keys('abc_123456')   #密码输入
    login.login_button_obj().click()    #登录按钮点击
    login.switch_default_frame()   #切换到默认的frame页面
    print('登录成功')
    driver.quit()    #退出


引入配置文件改造后代码如下:

#encoding = utf-8

from util.get_object_map import *  #导入工具
from util.config_file_parse import *

class LoginPage(object):
    def __init__(self,driver):  #构造方法初始化
        self.driver = driver
        self.cp = ConfigParseFile()   #实例化解析文件类
        # 初始化数据,返回‘login_page’选项下的数据,类型为字典
        self.pv = self.cp.get_items_section('login_page')

    def switch_frame(self):
        try:
            #从定位表达式配置文件中读取frame 的定位方式和表达式
            locateType, locatorExpression = self.pv['lp_frame'.lower()].split(">")
            #获取frame页面元素对象
            frame = get_element(self.driver,locateType,locatorExpression)
            self.driver.switch_to.frame(frame)  #切换到frame页面
        except Exception as e:
            raise e
    def switch_default_frame(self):
        try:
            self.driver.switch_to.default_content()   #切换到默认的frame页面
        except Exception as e:
            raise e

    def user_name_obj(self):
        try:
            #从定位表达式配置文件里读取用户名文本框的定位方式和表达式
            locateType, locatorExpression = self.pv['lp_user_name'.lower()].split('>')
            #获取登录页面的用户名输入框元素对象,并返回给调用者
            element = get_element(self.driver, locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def password_obj(self):
        try:
            #从定位表达式配置文件里获取到密码输入框的定位方式和表达式
            locateType, locatorExression = self.pv['lp_password'.lower()].split('>')
            # 获取登录页面的密码输入框元素对象,并返回给调用者
            element = get_element(self.driver,locateType,locatorExression)
            return element
        except Exception as e:
            raise e

    def login_button_obj(self):
        try:
            #从定位表达式配置文件里获取到登录按钮的定位方式和表达式
            locateType, locatorExpression = self.pv['lp_login_button'.lower()].split(">")
            # 获取登录页面的登录按钮元素对象,并返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

if __name__ == '__main__':
    from util.open_browser import *
    import time
    driver = OpenBrowser()   #实例化启动浏览器对象
    login = LoginPage(driver)  #实例化登录页面对象
    login.switch_frame()   #切换到frame页面
    login.user_name_obj().send_keys('abc_123456qwe')  #用户名输入
    login.password_obj().send_keys('abc_123456')   #密码输入
    login.login_button_obj().click()    #登录按钮点击
    login.switch_default_frame()   #切换到默认的frame页面
    time.sleep(3)
    print('登录成功')
    driver.quit()    #退出

二,HOME页面的元素原封装如下:

#encoding = utf-8

from util.get_object_map import *

class HomePage(object):
    def __init__(self,driver):
        self.driver = driver

    def address_book(self):
        try:
            #获取通讯录按钮元素对象
            element = get_element(self.driver,'xpath','//div[text()="通讯录"]')
            return element
        except Exception as e:
            raise e

if __name__ =='__main__':
    from util.open_browser import *
    from app_models.login_action import LoginAction
    driver = OpenBrowser()   #创建浏览器实例
    lg=LoginAction()    #创建登录页面实例
    lg.login(driver,'abc_123456qwe','abc_123456')  #登录
    hg = HomePage(driver)  #创建home 页面实例
    hg.address_book().click() #点击通讯录按钮
    driver.quit()  #退出


引入配置文件后改造如下:

#encoding = utf-8

from util.get_object_map import *
from util.config_file_parse import *

class HomePage(object):
    def __init__(self,driver):
        self.driver = driver
        self.cp = ConfigParseFile()  # 实例化解析文件类
        # 初始化数据,返回‘login_page’选项下的数据,类型为字典
        self.pv = self.cp.get_items_section('home_page')

    def address_book(self):
        try:
            #从定位表达式文件里读取通信录按钮的定位方式和表达式
            locatetType, locatorExpression = self.pv['hp_address_book'.lower()].split('>')
            #获取通讯录按钮元素对象
            element = get_element(self.driver,locatetType,locatorExpression)
            return element
        except Exception as e:
            raise e

if __name__ =='__main__':
    from util.open_browser import *
    from app_models.login_action import LoginAction
    import time
    driver = OpenBrowser()   #创建浏览器实例
    lg=LoginAction()    #创建登录页面实例
    lg.login(driver,'abc_123456qwe','abc_123456')  #登录
    hg = HomePage(driver)  #创建home 页面实例
    hg.address_book().click() #点击通讯录按钮
    time.sleep(3)
    driver.quit()  #退出


三,添加联系人页面的元素原封装如下

#encoding = utf-8

from util.get_object_map import *

class AddContactPensonPage(object):
    def __init__(self,driver):
        self.driver = driver

    def add_contact_person_button(self):
        try:
            #获取添加联系人按钮元素对象返回给调用者
            element = get_element(self.driver,'xpath','//span[text()="新建联系人"]')
            return element
        except Exception as e:
            raise e

    def user_name(self):
        try:
            #获取新建联系人姓名元素对象返回给调用者
            element = get_element(self.driver,'xpath','//a[@title="编辑详细姓名"]/preceding-sibling::div/input')
            return element
        except Exception as e:
            raise e

    def user_person_email(self):
        try:
            #获取新建联系人电子邮箱元素对象返回给调用者
            element = get_element(self.driver,'xpath','//div[@id="iaddress_MAIL_wrap"]//dd/div//input')
            return element
        except Exception as e:
            raise e

    def is_star(self):
        try:
            #获取是否是星标朋友的元素对象返回给调用者
            element = get_element(self.driver,'xpath','//span[text()="设为星标联系人"]/preceding-sibling::span/b')
            return element
        except Exception as e:
            raise e

    def user_person_phon(self):
        try:
            #获取联系人手机号码元素对象返回给调用者
            element = get_element(self.driver,'xpath','//div[@id="iaddress_TEL_wrap"]//dd/div//input')
            return element
        except Exception as e:
            raise e

    def user_person_comment(self):
        try:
            #获取备注元素对象返回给调用者
            element = get_element(self.driver,'xpath','//textarea[@id="input_DETAIL"]')
            return element
        except Exception as e:
            raise e

    def save_button(self):
        try:
            #获取确定按钮元素对象返回给调用者
            element = get_element(self.driver,'xpath','//span[text()="确 定"]')
            return element
        except Exception as e:
            raise e

if __name__ =='__main__':
    from util.open_browser import *
    from app_models.login_action import LoginAction
    from page_objects.home_page import *
    from time import sleep
    driver = OpenBrowser()  #创建浏览器实例
    lg = LoginAction()      #创建登录页面实例
    lg.login(driver,'abc_123456qwe','abc_123456') #登录
    hg = HomePage(driver)   #创建home页面实例
    hg.address_book().click() #点击通讯录按钮
    cp=AddContactPensonPage(driver)  #创建添加联系人页面元素实例
    cp.add_contact_person_button().click()  #点击添加联系人按钮
    sleep(3)
    cp.user_name().send_keys('xinzeng')   #姓名输入
    sleep(3)
    cp.user_person_email().send_keys('14432@163.com') #电子邮箱输入
    cp.is_star().click()   #点击星标按钮
    cp.user_person_phon().send_keys('12345324323')  #输入电话
    cp.user_person_comment().send_keys('gdgfghgfh')  #输入备注
    cp.save_button().click()  #点击确定
    sleep(3)
    assert u'xinzeng' in driver.page_source  #断言xinzeng 是否添加完成
    sleep(2)
    print('断言成功')
    driver.quit()  #退出


引入配置文件改造后代码如下

#encoding = utf-8

from util.get_object_map import *
from util.config_file_parse import *

class AddContactPensonPage(object):
    def __init__(self,driver):
        self.driver = driver
        self.cp = ConfigParseFile()  # 实例化解析文件类
        # 初始化数据,返回‘login_page’选项下的数据,类型为字典
        self.pv = self.cp.get_items_section('add_contact_person_page')

    def add_contact_person_button(self):
        try:
            # 从定位表达式配置文件中读取添加联系人按钮 的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_add_contact_person_button'.lower()].split(">")
            #获取添加联系人按钮元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def user_name(self):
        try:
            # 从定位表达式配置文件中读取添加联系人姓名文本框 的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_contact_person_name'.lower()].split(">")
            #获取新建联系人姓名元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def user_person_email(self):
        try:
            # 从定位表达式配置文件中读取添加联系人电子邮箱 的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_contact_person_email'.lower()].split(">")
            #获取新建联系人电子邮箱元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def is_star(self):
        try:
            # 从定位表达式配置文件中读取 是否是星标朋友按钮的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_is_star'.lower()].split(">")
            #获取是否是星标朋友的元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def user_person_phon(self):
        try:
            # 从定位表达式配置文件中读取添加联系人电话文本框的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_contact_person_phon'.lower()].split(">")
            #获取联系人手机号码元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def user_person_comment(self):
        try:
            # 从定位表达式配置文件中读取添加联系人备注文本框 的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_contact_person_coment'.lower()].split(">")
            #获取备注元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

    def save_button(self):
        try:
            # 从定位表达式配置文件中读取保存按钮 的定位方式和表达式
            locateType, locatorExpression = self.pv['cp_contact_person_save_button'.lower()].split(">")
            #获取确定按钮元素对象返回给调用者
            element = get_element(self.driver,locateType,locatorExpression)
            return element
        except Exception as e:
            raise e

if __name__ =='__main__':
    from util.open_browser import *
    from app_models.login_action import LoginAction
    from page_objects.home_page import *
    from time import sleep
    driver = OpenBrowser()  #创建浏览器实例
    lg = LoginAction()      #创建登录页面实例
    lg.login(driver,'abc_123456qwe','abc_123456') #登录
    hg = HomePage(driver)   #创建home页面实例
    hg.address_book().click() #点击通讯录按钮
    cp=AddContactPensonPage(driver)  #创建添加联系人页面元素实例
    cp.add_contact_person_button().click()  #点击添加联系人按钮
    sleep(3)
    cp.user_name().send_keys('xinzeng')   #姓名输入
    sleep(3)
    cp.user_person_email().send_keys('14432@163.com') #电子邮箱输入
    cp.is_star().click()   #点击星标按钮
    cp.user_person_phon().send_keys('12345324323')  #输入电话
    cp.user_person_comment().send_keys('gdgfghgfh')  #输入备注
    cp.save_button().click()  #点击确定
    sleep(3)
    assert u'xinzeng' in driver.page_source  #断言xinzeng 是否添加完成
    sleep(2)
    print('添加联系人完成')
    driver.quit()  #退出


总结

引用配置文件后我们已经完成了3个页面的改造,这样就实现了页面元素表达式和代码 完全分离(初步框架),即使页面元素有大的变动,我们只要修改配置文件的元素表达式,大大减少了维护成本。但我们还没有实现测试数据和代码完全分离,下一篇我们继续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值