-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1dc623a
commit e1fc146
Showing
5 changed files
with
180 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("删除部门失败") |