0


亲妈级教程实现Web网页自动登录|python自动化测试

本测试项目采取PO模型和数据分离式架构,采用selenium+pytest+allure+jenkins结合的方式进行脚本编写与运行

1、项目目录

目前项目使用以下4个文件即可实现,先建立safe文件夹,再依次建立login.py、login.json、login.py、test_login.py四个python文件

2、conf/safe/login.py

此文件用来储存商户前端获取的页面元素

2.1、元素检查

打开商户网页(https://store-b2b2c.pickmall.cn/login),右键,选择“检查”,进入元素选择界面![](https://i-blog.csdnimg.cn/direct/f61c7155789e40c18536292f33999a18.webp)

2.2、获取元素

点击“元素选择器”,将鼠标移动至想要获取的元素上,比如“用户名输入框”

点击后,在下面会出现对应的高亮代码

右键高亮代码,复制为Xpath(首选Xpath,如代码运行失败可尝试复制为selector)

在新建的login.py中粘贴至对应位置(注:复制前端元素方式对应代码中By.XPATH还是By.CSS_SELECTOR的方式)

依次类推,将所需前端元素写入文件,完整代码:

# 存放前端HTML的元素
from selenium.webdriver.common.by import By

# 用户名
username = By.CSS_SELECTOR, ("[placeholder='请输入用户名']")
# 密码
password = By.CSS_SELECTOR, ("[placeholder='请输入密码']")
# 登录按钮
login_btn = By.XPATH, ('//*[@id="main"]/div/div/div/div[2]/div[2]/div')
# 拼接小缺口图片
small_pic = By.XPATH, ('//*[@id="main"]/div/div/div/div[4]/div[1]/img[2]')
# 拼接背景图
big_pic = By.XPATH, ('//*[@id="main"]/div/div/div/div[4]/div[1]/img[1]')
# 拼接滑块
picture_btn = By.XPATH, ('//*[@id="main"]/div/div/div/div[4]/div[2]/span[2]')
# 登录后文字
get_word = By.XPATH, ('//*[@id="main"]/div/div[3]/div/div/div[1]/div[2]/h4')

3、data/safe/login.json

此文件为登录网站所需数据,网址、用户名、密码(帐号为网站免费提供试用,切勿进行违规操作),完整代码:

{
  "url": "https://store-b2b2c.pickmall.cn/login",
  "username": "13011111111",
  "password": "111111",
  "verify_word": "平台公告"
}

4、page/safe/login.py

此文件书写登录操作,输入帐号、输入密码、点击登录、滑块验证

4.1、PageLogin类

新建PageLogin类(继承Common类),在类中定义page_input_username方法,调用common_input输入账户名;login.username为我们刚刚写好的conf/safe/login.py中的页面元素

此方法的意思是:定义page_input_username 方法,调用common_input 的输入方法,输入元素为login.username ,输入内容为username ;以此类推,将其他登录所需步骤依次写入文件

class PageLogin(Common):
    # 输入用户名
    def page_input_username(self, username):
        self.common_input(login.username, username)
4.2、page_longin() 函数

最后需建立一个综合调用所有步骤的方法
将前面写好的方法按照我们实际操作的顺序逐一调用,且设置一些必要的等待时间,避免元素未加载完成造成测试失败(本代码仅为演示使用,实际生产环境切勿添加过多过长等待)

def page_login(self, username, password):
     sleep(2)
     self.page_input_username(username)
     sleep(1)
     self.page_input_password(password)
     sleep(2)
     self.page_click_login_btn()
     sleep(2)
     self.page_save_picture()
4.3、完整代码
from time import sleep
from common.common import Common
from conf.sale import login
from tools.make_picture import Make_Picture
from tools.get_log import GetLog
import allure

log = GetLog.get_logger()

# 商城登录类
log.info("商城登录类")
class PageLogin(Common):
    # 输入用户名
    log.info("输入用户名")
    @allure.step('输入用户名')
    def page_input_username(self, username):
        self.common_input(login.username, username)

    # 输入密码
    log.info("输入密码")
    @allure.step('输入密码')
    def page_input_password(self, password):
        self.common_input(login.password, password)

    # 点击登录
    log.info("点击登录")
    @allure.step('点击登录')
    def page_click_login_btn(self):
        self.common_click(login.login_btn)

    # 验证滑块
    log.info("验证滑块")
    @allure.step('验证滑块')
    def page_save_picture(self):
        # 保存滑动验证图片至本地
        lld = self.common_save_picture(login.small_pic, login.big_pic)
        sleep(1)
        # 计算要滑动的距离
        dirt = Make_Picture().Measure_distance(lld[0], lld[1])
        sleep(1)
        # 拖动滑块完成验证
        self.common_hold_mouse(login.picture_btn, dirt, 0)
        sleep(1)

    # 获取登录成功后文字
    log.info("获取登录成功后文字")
    @allure.step('获取登录成功后文字')
    def page_get_word(self):
        return self.common_get_word(login.get_word)

    # 综合调用方法
    log.info("综合调用方法")
    @allure.step('综合调用方法')
    def page_login(self, username, password):
        sleep(2)
        self.page_input_username(username)
        sleep(1)
        self.page_input_password(password)
        sleep(2)
        self.page_click_login_btn()
        sleep(2)
        self.page_save_picture()

5、scripts/safe/test_login.py

此文件为运行代码的入口,初始化浏览器驱动、运行对应page层的项目代码、输出测试报告

5.1、TestLogin类

新建TestLogin类,新建setup_class初始化方法,self.data_json 为初始化json数据,也就是把json中对应的字段传入到test_login.py中来;self.driver为初始化浏览器驱动,也就是调起chrome浏览器的动作;新建teardown_class结束方法, 就是关闭chrome浏览器的动作,防止进程一直被占用,消耗服务器资源

class TestLogin:
    # 初始化
    def setup_class(self):
        # 初始化json数据
        pathdir = os.sep+"sale"+os.sep+"login.json"
        self.data_json = read_json(pathdir)
        # 初始化driver
        self.driver = GetDriver().get_driver(self.data_json[0])

    # 结束
    def teardown_class(self):
        self.driver.quit()
5.2、test_login() 函数

新建test_login方法,PageLogin(self.driver).page_login 调用page层中写的综合方法page_login,将json文件中帐号、密码传入,完成登录过程;assert为断言语法,找到登录成功后才会显示的界面中的比较特殊的文字,本文选取的文字是“平台公告”,如断言成功则输出pass脚本结束,如断言失败则抛出AssertionError脚本结束

def test_login(self):
    PageLogin(self.driver).page_login(self.data_json[1], self.data_json[2])
    # 避免因为错误导致脚本异常中断
    try:
        # 判断是否登录成功
        log.info("断言成功")
        assert PageLogin(self.driver).page_get_word() == self.data_json[3]
    # 未成功,抛出异常
    except Exception as e:
    log.info("断言失败")
    print("错误信息为:", e)
    raise

5.3、完整代码
import os
from tools.get_driver import GetDriver
from tools.read_json import read_json
from page.sale.login import PageLogin
from tools.get_log import GetLog

log = GetLog.get_logger()
import allure

@allure.feature("登录方法类")
class TestLogin:
    # 初始化
    log.info("初始化")
    def setup_class(self):
        # 初始化json数据
        pathdir = os.sep+"sale"+os.sep+"login.json"
        self.data_json = read_json(pathdir)
        # 初始化driver
        self.driver = GetDriver().get_driver(self.data_json[0])

    # 结束
    log.info("结束")
    def teardown_class(self):
        self.driver.quit()

    # 调用page层的综合调用方法
    log.info("调用page层的综合调用方法")
    @allure.title("登录方法")
    def test_login(self):
        PageLogin(self.driver).page_login(self.data_json[1], self.data_json[2])
        # 避免因为错误导致脚本异常中断
        try:
            # 判断是否登录成功
            log.info("断言成功")
            assert PageLogin(self.driver).page_get_word() == self.data_json[3]
        # 未成功,抛出异常
        except Exception as e:
            log.info("断言失败")
            print("错误信息为:", e)
            raise

if __name__ == '__main__':
    TestLogin().test_login()

6、至此项目代码结束

---THE END ---

更多内容请关注微信公众号

标签: python 自动化

本文转载自: https://blog.csdn.net/apple_51757676/article/details/143861283
版权归原作者 大飞记Python 所有, 如有侵权,请联系我们删除。

“亲妈级教程实现Web网页自动登录|python自动化测试”的评论:

还没有评论