求助:webui自动化,企业微信添加成员和部门功能封装为PO后执行报错

问题 :通过PO重新封装了企业微信添加成员和部门两个功能,当执行添加部门时,获取到的提示信息始终都是上一条用例(添加成员成功的提示信息“保存成功”),导致用例执行报错

代码完整链接https://gitee.com/wj0726/my-homework/tree/master/web自动化封装PO问题

在setup()方法中添加了用例执行前先单击<首页>链接的操作,在执行添加部门之前应会先去点击首页,按理说页面都切换了,在页面上应不会再有“保存成功”的提示了。

求教:是封装PO代码逻辑问题?还是对于执行操作的流程理解有问题?

PO代码:test_add_member.py

import time

from faker import Faker

from page.login_page import LoginPage


class TestAddMember:

    def setup_class(self):
        self.homepage = LoginPage().login()

        self.faker = Faker('zh-CN')

    def teardown_class(self):
        pass

    def setup(self):
        self.homepage.click_home()

    def test_add_member(self):
        """首页->通讯录->添加成员->保存->校验"""
        text = self.homepage\
            .click_contact()\
            .click_member()\
            .add_member(self.faker.name(), self.faker.ssn(), self.faker.phone_number())\
            .get_tips()
        assert text == "保存成功"

    def test_add_apartment(self):
        """首页->通讯录->添加部门->保存->校验"""
        context_page = self.homepage.click_contact()
        # 必须添加 等待提示框消失操作,才能获取到"新建部门成功"的提示信息
        # context_page.wait_tips_clear()
        text = context_page.click_apartment()\
            .add_apartment(self.faker.random_letter())\
            .get_tips()
        print(f"text提示信息为:{text}")
        assert text == "新建部门成功"

未封装PO代码:test_add_mem_and_part.py(未封装前执行成功)

import os
import time

import yaml
from faker import Faker
from selenium import webdriver
from selenium.webdriver.common.by import By
from conftest import ROOT_PATH


class TestAddMemAndPart:
    def setup_class(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

        self.faker = Faker('zh-CN')

        # 植入cookie,完成自动登录
        cookie_path = os.sep.join([ROOT_PATH, 'datas', 'cookies.yml'])

        with open(cookie_path, 'r', encoding='utf-8') as f:
            cookies = yaml.safe_load(f)
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame")
        for cookie in cookies:
            self.driver.add_cookie(cookie)
        self.driver.refresh()

    def teardown_class(self):
        # self.driver.quit()
        pass

    def setup(self):
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame")

    def test_add_member(self):
        # 单击<通讯录>
        self.driver.find_element(By.ID, "menu_contacts").click()
        # 单击<添加成员>
        self.driver.find_element(By.LINK_TEXT, '添加成员').click()

        # 输入姓名 账号 手机号
        self.driver.find_element(By.ID, "username").send_keys(self.faker.name())
        self.driver.find_element(By.ID, "memberAdd_acctid").send_keys(self.faker.ssn())
        self.driver.find_element(By.CSS_SELECTOR, ".ww_telInput_mainNumber").send_keys(self.faker.phone_number())
        # 单击<保存>
        self.driver.find_element(By.CSS_SELECTOR, ".qui_btn.ww_btn.js_btn_save").click()
        # 获取页面提示"保存成功"文本
        text = self.driver.find_element(By.ID, "js_tips").text
        # 断言保存成功
        assert "保存成功" == text

    def test_add_apartment(self):
        # 单击<通讯录>
        self.driver.find_element(By.ID, "menu_contacts").click()
        # 单击<+>
        self.driver.find_element(By.CSS_SELECTOR, ".member_colLeft_top_addBtn").click()
        # 单击<添加部门>
        self.driver.find_element(By.CSS_SELECTOR, ".js_create_party").click()
        # 输入部门名称
        self.driver.find_element(By.CSS_SELECTOR, "[name='name']").send_keys(self.faker.random_letter())
        # 选择所属部门
        self.driver.find_element(By.LINK_TEXT, "选择所属部门").click()
        self.driver.find_element(By.XPATH, "//div[@class='inputDlg_item']//a[text()='未命名企业']").click()
        # 单击<确定>
        self.driver.find_element(By.LINK_TEXT, "确定").click()
        # 获取页面提示"新建部门成功"文本
        text = self.driver.find_element(By.ID, "js_tips").text
        # 断言新建部门成功
        assert "新建部门成功" == text


代码权限没放开,方便把仓库设成公开吗

其实页面元素没发生变化,当时的元素还在

使用未封装PO的setup应该就可以了

权限已放开,麻烦老师看一下,谢谢

刚看了一下确实如此,请问为什么未封装之前就不会报错呢?

未封装的setup执行的是重新访问一个网址,相当于刷新了界面

封装的setup可以使用driver.refresh

这个细节问题真没注意,感谢老师 :+1: :+1: :+1:

感谢老师 :+1::+1::+1: