zoukankan      html  css  js  c++  java
  • Selenium模块化驱动测试介绍和实例

    线性模型介绍:

    线性模型虽然每个用例都可以拿来独立运行,但是用例之间重复代码多,开发、维护成本高。

    其实把重复的操作代码封装成独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。

    比如登录系统、退出系统、收藏等等。

    如下实例(代码中包含我当前用的一些内部地址和账号,做了隐藏,请知悉。)

    登录和注册代码如下:

    # #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time : 2020/8/11 9:13
    # @Author : Gengwu
    # @FileName: user_login.py
    # @Software: PyCharm
    
    from  selenium import  webdriver
    from  time import  sleep
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.alert import  Alert
    
    driver=webdriver.Chrome()
    driver.get('https://qa-***.com/')
    driver.maximize_window()
    
    #清除用户名的框,防止自动带入
    driver.find_element_by_id('account').clear()
    driver.find_element_by_id('account').send_keys('admin')
    
    #清除密码的框,防止自动带入
    driver.find_element_by_id('password').clear()
    driver.find_element_by_id('password').send_keys('admin')
    
    #点击登录按钮
    driver.find_element_by_css_selector('#app > div > div > div.content > form > div.login-form-button-item > button').click() #copy到selector
    sleep(2)
    
    #通过悬浮框定位到退出登录
    above=driver.find_element_by_class_name('author')
    ActionChains(driver).move_to_element(above).perform()
    driver.find_element_by_link_text('退出登录').click()
    
    sleep(2)
    #点击弹框的确定按钮
    driver.find_element_by_css_selector('.ant-modal-body .ant-btn-primary').click()
    sleep(2)
    
    driver.quit()

    将登录的操作封装到login()函数中,将退出的操作封装到logout()函数中,用到时调用即可

    新建:Loginclass.py

    代码如下:

    # #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time : 2020/8/12 16:48
    # @Author : Gengwu
    # @FileName: LoginClass.py
    # @Software: PyCharm
    
    from  selenium import  webdriver
    from  time import  sleep
    from selenium.webdriver.common.action_chains import ActionChains
    
    class Login(): #定义一个类,类下面封装两个方法,一个登录,一个退出
        def user_login(self,driver):
            # 清除用户名的框,防止自动带入
            driver.find_element_by_id('account').clear()
            driver.find_element_by_id('account').send_keys('admin')
    
            # 清除密码的框,防止自动带入
            driver.find_element_by_id('password').clear()
            driver.find_element_by_id('password').send_keys('admin')
    
            # 点击登录按钮
            driver.find_element_by_css_selector(
                '#app > div > div > div.content > form > div.login-form-button-item > button').click()  # copy到selector
            sleep(2)
    
        def user_logout(self,driver):
            # 通过悬浮框定位到退出登录
            above = driver.find_element_by_class_name('author')
            ActionChains(driver).move_to_element(above).perform()
            driver.find_element_by_link_text('退出登录').click()
    
            sleep(2)
            # 点击弹框的确定按钮
            driver.find_element_by_css_selector('.ant-modal-body .ant-btn-primary').click()
            sleep(2)
    
    if __name__=='__main__': #调试
        driver = webdriver.Chrome()
        driver.get('https://qa-***.com/')
        driver.maximize_window()
        sleep(3)
    
        Login().user_login(driver)
        sleep(2)
        Login().user_logout(driver)
        sleep(3)
    
        driver.quit()
    Call_login.py
    # #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time : 2020/8/13 11:01
    # @Author : Gengwu
    # @FileName: Call_login.py
    # @Software: PyCharm
    
    from LoginClass import *
    from selenium import webdriver
    from time import sleep
    
    driver=webdriver.Chrome()
    driver.get('https://qa***.com/')
    driver.maximize_window()
    driver.implicitly_wait(10) #设置一个隐式等待时间
    
    Login().user_login(driver)
    sleep(3)
    Login().user_logout(driver)
    sleep(3)
    
    driver.quit()

    现在是将复用的代码独立保存,使用时导入调用即可.

    三个py文件已经要在同一个文件夹下

     这样的话就实现了封装和调用。

    以上如果有问题欢迎随时沟通和讨论!

    转载请告知!谢谢!

    Best Regards!
    Make a little progress every day!
  • 相关阅读:
    内存泄露之LeakCanary原理简析
    springboot(2.3.4)替换默认的logback为log4j2
    springboot-SPI-修改配置文件
    Vue组件
    米尔开发板测试记录
    调试米尔开发板记录
    linux操作GPIO命令
    linux操作PWM命令
    前端缓存(Storage)之有效期
    微信移动端判断二维码识别是否长按
  • 原文地址:https://www.cnblogs.com/gengwulovestudy/p/13495442.html
Copyright © 2011-2022 走看看