Skip to content

Commit

Permalink
web自动化登陆-PO设计模式-测试添加成员、部门、删除成员、部门
Browse files Browse the repository at this point in the history
  • Loading branch information
15223417008 committed Aug 5, 2021
1 parent 1dc623a commit e1fc146
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 0 deletions.
61 changes: 61 additions & 0 deletions selenium_test/page/base_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# 把selenium的操作,放在基础page中
import secrets

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.chrome.options import Options
import random
import string


class BasePage:
url = 'https://work.weixin.qq.com/'

def __init__(self, driver: WebDriver = None): # driver: webdriver=None :单纯的用于语法提示,本身没有代码功能
if not driver: # 如果没有传递driver,说明是第一层调用,比如企业微信官网
option = Options()
option.debugger_address = 'localhost:9222' # 写入启动命令的地址端口
self.driver = webdriver.Chrome(options=option)
self.driver.get(self.url) # 定义url,如果子类没有没有重写url,则用父类的url
self.driver.implicitly_wait(5)
else: # 如果传递了driver,说明不是第一次调用,比如企业微信官网->登陆页面
self.driver = driver

def quit(self): # 封装退出浏览器方法
return self.driver.quit()

def find_by_css(self, css): # 封装css定位方法
return self.driver.find_element_by_css_selector(css)

def find_by_path(self, path): # 封装xpath定位方法
return self.driver.find_element_by_xpath(path)

def add_member_name_info(self): # 封装随机生成名字方法
first_name = ["王", "李", "张", "刘", "赵", "蒋", "孟", "陈", "徐", "杨", "沈", "马", "高", "殷", "上官", "钟", "常"]
second_name = ["伟", "华", "建国", "洋", "刚", "万里", "廷亮", "爱民", "牧", "陆", "路", "昕", "鑫", "兵", "硕", "志宏", "峰", "磊",
"雷",
"文", "明浩", "光", "超", "军", "达", "汪"]
name = random.choice(first_name) + random.choice(second_name) # 随机生成名字
return name

def add_member_position_info(self): # 封装随机生成职务方法
job = ["测试小弟", "测试员", "测试大佬", "开发小弟", "开发大佬", "产品", "视觉", "交互", "项目老大"]
position = random.choice(job) # 随机生成职务
return position

def add_member_account_info(self): # 封装随机生成账号方法
account = ''.join(
random.choices(string.ascii_lowercase + string.ascii_uppercase + string.digits, k=5)) # 随机生成账号
return account

def add_member_phone_info(self): # 封装随机生成手机号码方法
phone = '15' + str(random.randrange(4, 10)) + ''.join(
str(random.choice(range(10))) for _ in range(8)) # 随机生成手机号码
return phone

def add_department_name(self): # 封装随机生成随机部门名称
name1 = ["测试保障", "研发", "产品", "策划", "运营", "营销", "业务", "财务", "法务", "风控", "销售", "后勤"]
name2 = ["项目组", "部", "科"]

dpartment_name = random.choice(name1) + random.choice(name2)
return dpartment_name
28 changes: 28 additions & 0 deletions selenium_test/page/department_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import time

from test_pytest.selenium_test.page.base_page import BasePage
from selenium.webdriver.support.ui import Select


class DepartmentPage(BasePage):
def setup(self):
pass

def add_department(self): # 添加部门
self.find_by_css(".member_colLeft_top_addBtnWrap").click() # 点击+按钮
self.find_by_css(".js_create_party").click() # 点击添加部门
self.find_by_path("//*[@class='form']/div/input[@name='name']").send_keys(
self.add_department_name()) # 输入生成的随机部门名称
self.find_by_path("//*[@class='inputDlg_item'][3]/a").click() # 点击下拉框
self.find_by_css("form>div>div>div>ul>li>a").click() # 点击选择所属部门
# self.driver.switch_to.alert.accept() # 点击弹框的确定按钮
self.find_by_path("//*[@d_ck='submit']").click() # 点击弹框的确定按钮
time.sleep(2)

def delete_department(self): # 删除部门
self.find_by_path("//*[@role='group']/li/ul/li[1]").click()
self.find_by_path("//*[@role='group']/li/ul/li[1]/a/span").click() # 点击更多按钮
self.find_by_path(
"//*[@class='vakata-context jstree-contextmenu jstree-default-contextmenu']/li[7]/a").click() # 点击删除按钮
self.find_by_path("//*[@d_ck='submit']").click() # 点击确定按钮
time.sleep(2)
26 changes: 26 additions & 0 deletions selenium_test/page/main_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# 首页的page
from test_pytest.selenium_test.page.base_page import BasePage
from test_pytest.selenium_test.page.department_page import DepartmentPage
from test_pytest.selenium_test.page.member_page import MemberPage


class MainPage(BasePage):
url = 'https://work.weixin.qq.com/wework_admin/frame' # 对基类的url进行重写

def goto_add_member(self): # 进入添加成员页面
self.driver.find_element_by_xpath("//*[@node-type='addmember']").click() # 点击添加成员
return MemberPage(self.driver)

def goto_address_book(self):
self.find_by_css("#menu_contacts").click() # 进入通讯录页面
return MemberPage(self.driver)

def goto_import(self):
self.driver.find_element_by_xpath("//*[@node-type='import']").click() # 点击导入通讯录

def goto_attendance(self):
self.driver.find_element_by_xpath("//*[@node-type='attendance']").click() # 点击打卡

def goto_address_book_department(self):
self.find_by_css("#menu_contacts").click() # 进入通讯录-点击添加部门
return DepartmentPage(self.driver)
22 changes: 22 additions & 0 deletions selenium_test/page/member_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import time

from test_pytest.selenium_test.page.base_page import BasePage


class MemberPage(BasePage):
def setup(self):
pass

def add_save_member(self):
self.find_by_css("#username").send_keys(self.add_member_name_info()) # 输入名字
self.find_by_css("#memberAdd_acctid").send_keys(self.add_member_account_info()) # 输入账号
self.find_by_css("#memberAdd_phone").send_keys(self.add_member_phone_info()) # 输入 手机号码
self.find_by_css("#memberAdd_title").send_keys(self.add_member_position_info()) # 输入职务
self.find_by_path("//*[@class='member_colRight_operationBar ww_operationBar'][1]/a[2]").click() # 点击保存
time.sleep(2)

def delete_member(self):
self.find_by_path("//*[@id='member_list']/tr[3]/td/input").click() # 点击第三个选择按钮
self.find_by_path("//*[@class='ww_operationBar']/a[3]").click() # 点击删除按钮
self.find_by_path("//*[@d_ck='submit']").click() # 点击确定按钮
time.sleep(2)
43 changes: 43 additions & 0 deletions selenium_test/testcase/test_member_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import time

from test_pytest.selenium_test.page.main_page import MainPage


class TestMain:
def setup(self):
self.main = MainPage()

def teardown(self):
self.main.quit()

def test_goto_add_member(self): # 测试随机添加成员
self.main.goto_add_member().add_save_member() # 添加成员
save_success = self.main.find_by_css("#js_tips") # 找到页面添加成功元素:保存成功
if save_success: # 判断是否有该元素
print("添加成员成功")
else:
print("添加成员失败")

def test_add_department(self): # 测试随机添加部门
self.main.goto_address_book_department().add_department()
add_department_syccess = self.main.find_by_css("#js_tips") # 找到页面添加部门成功后页面的"从其他部门移入"按钮元素
if add_department_syccess: # 判断是否有该元素
print("添部门加成功")
else:
print("添加部门失败")

def test_delete_member(self): # 测试删除成员
self.main.goto_address_book().delete_member() # 删除成员
delete_success = self.main.find_by_path("//*[@id='js_tips']") # 找到删除成功的元素
if delete_success: # 判断是否有该元素
print("删除成员成功")
else:
print("删除成员失败")

def test_delete_department(self): # 测试删除部门
self.main.goto_address_book_department().delete_department() # 删除部门
delete_department = self.main.find_by_css("#js_tips") # 找到删除部门成功的元素
if delete_department: # 判读是否有该元素
print("删除部门成功")
else:
print("删除部门失败")

0 comments on commit e1fc146

Please sign in to comment.