企业微信实战(二)作业帖

  1. 完善你的PO,把显示等待等涉及到webdriver的方法封装到basepage中
  2. 使用PO设计模式写如下的testcase:
  • 删除成员
  • 导入通讯录
  1. 回复github链接到帖子里
  2. basepage的每一行都需要写注释

https://github.com/anny2020/hogwarts.git

https://github.com/CandiceDiao/lagouhomework/tree/master/webtest/PO

将显示等待封装到basepage中,在执行时,依然每次都要调用等待,待优化

1、通讯录页面

# -*- encoding: UTF-8 -*-
"""
@File    : menu_contact_page.py
@Time    : 2020-6-24 9:02
@Author  : Mokwing
@Email   : 1010326277@qq.com
@Software: PyCharm
@Message : 通讯录页面
"""
from time import sleep

from selenium.webdriver.common.by import By

from hogwarts.qywechat.page.base_page import BasePage


class MenuContacts(BasePage):
    # _member_name_loc = '.ww_checkbox'   # 定位复选框 -- 使用 checkbox_by_name_or_tel() 定位复选框,该方式停用
    _js_list_loc = '.js_list'  # 当前成员列表
    _delete_btn_loc = ".js_delete"  # 删除按钮
    _wait_add_user_loc = '//*[text()="添加成员"]'  # 确认添加成员
    _confirm_btn_loc = '//*[@id="__dialog__MNDialog__"]/div/div[3]/a[1]'  # 确认按钮
    _cancel_btn_loc = '//*[@id="__dialog__MNDialog__"]/div/div[3]/a[2]'  # 取消按钮
    _delete_success_loc = '//*[text()="删除成功"]'

    # 删除成员
    def delete_contact_info(self, name="", tel=""):
        # 找到需要删除的用户点击复选框选择
        self.checkbox_by_name_or_tel(name, tel).click()
        # 点击删除按钮
        self._driver.find_element(By.CSS_SELECTOR, self._delete_btn_loc).click()
        # 点击确认
        self._driver.find_element(By.XPATH, self._confirm_btn_loc).click()
        # 获取删除后提示信息
        return self._driver.find_element(By.XPATH, self._delete_success_loc).text

    # 导入通讯录成员
    _id_js_upload_file_input_loc = 'js_upload_file_input'  # id -- 上传文件
    _id_submit_csv_loc = 'submit_csv'   # id -- 确认导入
    _id_check_assert_loc = 'reloadContact'  # id -- 等待加载文件完成检查该元素是否存在,存在可以使用该元素进行断言

    def upload_contacts(self, fp):
        self._driver.find_element(By.ID, self._id_js_upload_file_input_loc).send_keys(fp)
        self._driver.find_element(By.ID, self._id_submit_csv_loc).click()
        b = self._according_to_wait(10, (By.ID, self._id_check_assert_loc))
        if b is False:
            print("等待文件上传!")
            sleep(10)
        # 上传成功返回校验信息
        return self._driver.find_element(By.ID, self._id_check_assert_loc).text

    # 通过名字或者手机号获取复选框
    def checkbox_by_name_or_tel(self, name="", tel=""):
        if name != "":
            ele_info = self._driver.find_element(By.XPATH,
                                                 f'//*[text()="{name}"]/parent::*/preceding-sibling::td/input')
        elif tel != "":
            ele_info = self._driver.find_element(By.XPATH,
                                                 f'//*[text()="{tel}"]/parent::*/preceding-sibling::td/input')
        elif name != "" and tel != "":
            ele_info = self._driver.find_element(By.XPATH,
                                                 f'//*[text()="{name}"]/parent::*/preceding-sibling::td/input')
        else:
            raise Exception("请输入需要删除的通讯录成员的姓名或者手机。")
        sleep(1)
        return ele_info

2、测试页面

# -*- encoding: UTF-8 -*-
"""
@File    : test_menu_contact.py
@Time    : 2020-6-24 9:55
@Author  : Mokwing
@Email   : 1010326277@qq.com
@Software: PyCharm
@Message : 测试通讯录页面
"""
from hogwarts.qywechat.page.home_page import HomePage


class TestMenuContact:
    def setup(self):
        self.home = HomePage(mod="rb")
        assert "首页" == self.home.go_to_login().scan_code_login_of_browser_reuse()

    def teardown(self):
        pass

    def test_delete_contact_info(self):
        contact_info = self.home.go_to_menu_contact().delete_contact_info(name="李丽婷", tel="13076232324")
        print("通讯录文本:", contact_info)
        assert "删除成功" == contact_info

    # 测试上传通讯录
    def test_upload_contacts(self):
        assert "前往查看" == self.home.go_to_upload_contacts().upload_contacts(
            r"C:\BianYi\WorkSpaces\python\mokwing2py\hogwarts\qywechat\test_data\contacts.xlsx")

3、源码

安洋–企业微信实战(二)

1 个赞

陈智斌: 企业微信实战(二)作业提交
Pages存放页面对象,TestCase存放测试用例,data存放数据文件(上传文件,cookie文件)
https://github.com/archerckk/hogwarts/tree/master/Page_Object

听不错的,还用了解元祖的方式。能从代码看出来已经理解PO了。不过有一个问题,如果你的page,比如import_page不是一个起始页面就不要给它的base_url赋值了。另外还有个优化空间是,PO除了公共方法会暴露为公有之外,其他的都是私有变量。比如你的定位元素 和你的base_url,包括driver,都可以做成私有

强等还需要做优化

写的很好,虽然还是有一些细节的瑕疵,但是看得出来加了很多自己的思考和优化。比较优秀的作业是应该这个样子的,给你点个赞。另外问一下base_page中的method 加_的意义是?

PO是理解了,但是还需要多优化,比如你的find 方法。上面有一些同学做的不错的可以参考。另外 文件名,类名,其实有点不合规范(pep8)。刚开始一定要养成好的编码习惯

哈哈,谢谢老师。主要是想 base_page 中的方法和其他页面区分开,调用时候好操作些;其实把名字定义好也行。 :joy:

谢谢老师,已优化。

https://github.com/ljwaaa/lagou2qiproject.git

已修改:
修改pages跟test_case的文件命名,类名
重写base_page的find跟finds方法,并且改为私有方法
测试用例的变量为result的都改为见名知意更容易理解断言的命名

https://github.com/tanya931117/TestDev

企业微信实战二 – 林遵明
https://github.com/jimmylinz/LagouProject.git

https://github.com/jb5881/TestDevlopProject/tree/master/homework0620

2 个赞

https://github.com/wu757/hogwartsStudy/tree/master/企业微信实战二

企业微信实战二-李国彬
https://github.com/liguob/pytest.git

https://github.com/Xiaodan666/lagou_test.git![image|800x324](upload://ndbItg3CamcmwxZl4QUxvvl37Zd.png)

张涛作业:https://github.com/tzhang-web/pyzt1/tree/master/qywx0102