案例一: 美多商城自动化登录
需求: 对于美多商城实现自动化登录,并生成登录后的测试报告。
1: 目录结构:

2: 代码:
2.1: main.py
import unittest
from BeautifulReport import BeautifulReport
if __name__ == '__main__':
# 1: 创建测试套件,把当前目录下的tests下的文件加入到容器中
suit = unittest.defaultTestLoader.discover('./tests')
# 2: 根据套件创建runner
runner = BeautifulReport(suit)
# 3; 使用runner 启动测试报告
runner.report('美多商城登录登出报告', '测试报告.html', './reports')
2.2 : test_users:
import unittest
from selenium.webdriver import Chrome
from parameterized import parameterized
import time
class MeiduoTest(unittest.TestCase):
# 1: 前置方法,创建Chrome对象
def setUp(self) -> None:
print("我是前置方法")
self.driver = Chrome()
# 2:后置方法,退出浏览器
def tearDown(self) -> None:
print("我是后置方法")
self.driver.quit()
# 3:测试用例:
def test_users(self):
print("我是测试用例")
# 3.1: 打开网页
self.driver.get("http://mp-meiduo-python.itheima.net")
# 3.2: 找到登录按钮,点击登录
self.driver.find_element_by_link_text('登录').click()
# 3.3: 找到账号和密码的输入框,先清空数据,然后再填写账号和密码
list1 = ['name_input', 'pass_input']
list2 = ['admin', 'admin']
flag = 0
for name in list1:
# 3.3.1: 获取元素
el = self.driver.find_element_by_class_name(name)
# 3.3.2: 清空元素
el.clear()
# 3.3.3: 输入元素
el.send_keys(list2[flag])
flag += 1
# 3.4: 复选框:如果选中了则取消选中
el = self.driver.find_element_by_name('remembered')
if el.is_selected():
el.click()
# 3.5: 找到登录按钮,进行登录
self.driver.find_element_by_class_name('input_submit').click()
# 3.6:退出登录
self.driver.find_element_by_class_name('quit').click()
案例二: QQ邮箱自动化登录
将用户名和密码的位置换成自己的就可以实现自动化登录。
import unittest
from selenium.webdriver import Chrome
from parameterized import parameterized
import time
class QQ_Login_Test(unittest.TestCase):
# 1: 前置方法,创建Chrome对象
def setUp(self) -> None:
print("我是前置方法")
self.driver = Chrome()
# 2:后置方法,退出浏览器
def tearDown(self) -> None:
print("我是后置方法")
self.driver.quit()
# 3:测试用例:
def test_users(self):
print("我是测试用例")
# 3.1: 打开网页
self.driver.get("https://mail.qq.com/")
time.sleep(2)
# 获取登录模块所在的内置页面对象
frame = self.driver.find_element_by_id('login_frame')
# 切换到内置页面中
self.driver.switch_to.frame(frame)
# 点击账号密码登录
self.driver.find_element_by_id('switcher_plogin').click()
time.sleep(2)
# 3.3: 找到账号和密码的输入框,先清空数据,然后再填写账号和密码
list1 = ['u', 'p']
list2 = ['用户名', '密码']
flag = 0
for name in list1:
# 3.3.1: 获取元素
el = self.driver.find_element_by_id(name)
# 3.3.2: 清空元素
el.clear()
time.sleep(1)
# 3.3.3: 输入元素
el.send_keys(list2[flag])
time.sleep(1)
flag += 1
# 3.4: 复选框:如果选中了则取消选中low_login_wording
el = self.driver.find_element_by_id('low_login_wording')
if el.is_selected():
el.click()
# 3.5: 找到登录按钮,进行登录
self.driver.find_element_by_id('login_button').click()
time.sleep(3)
案例三: 抖音,快手,火山自动刷视频
from appium import webdriver
import time
import random
SARTTIME: int = 2
ENDTIME: int = 10
STIME: int = 10
# 初始化平台信息
desired_caps = {
'platformName': 'Android', # 表示平台类型
'platformVersion': '7.1.2', # 表示平台的系统版本
'deviceName': '****', # 表示的是设备的ID,如果当前电脑只连接了一台手机或模拟器,可以使用4个*号代替
'appPackage': 'com.kuaishou.nebula', # 表示app的包名
'appActivity': 'com.yxcorp.gifshow.HomeActivity', # 表示的是app的界面名
'noReset': True # 启动app时不要清除app里的原有的数据
}
# 向上滑动。x轴保持不变,y轴:由大变小
def swipe_up(driver, width, height):
# 起点
_x = random.randint(4, 7)
_y = random.randint(6, 7)
x1 = int(width * 0.1 * _x)
y1 = int(height * _y * 0.1)
print(f'起点{x1, y1}')
# 终点
stop_y = random.randint(2, 4) * 0.1
duration = random.randint(1, 5) * 50
x2 = x1
y2 = int(height * stop_y)
driver.swipe(x1, y1, x2, y2, duration)
print(f'终点{x2, y2}')
def test_uc(name='快手'):
if name == '快手':
#### 快手配置信息
desired_caps['appPackage'] = 'com.kuaishou.nebula'
desired_caps['appActivity'] = 'com.yxcorp.gifshow.HomeActivity'
elif name == '抖音':
desired_caps['appPackage'] = 'com.ss.android.ugc.aweme.lite'
desired_caps['appActivity'] = 'com.ss.android.ugc.aweme.main.MainActivity'
elif name == '火山':
desired_caps['appPackage'] = 'com.ss.android.ugc.live'
desired_caps['appActivity'] = '.main.MainActivity'
print(f'小米{name}启动')
# 远程控制
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(STIME)
# 获取屏幕宽高
width = driver.get_window_size()["width"]
height = driver.get_window_size()["height"]
n = random.randint(1, 4)
i = 0
while True:
swipe_up(driver, width, height) # 滑动
_time = random.randint(SARTTIME, ENDTIME)
time.sleep(_time) # 延时
if i == 30 * n:
print(f'{name}退出')
break
print(f'time={_time}, i={i}, n={n*30}')
i = i + 1
driver.quit() # 退出
if __name__ == '__main__':
i = 0
while True:
name_list = ['快手', '抖音', '火山']
if i == len(name_list):
i = 0
try:
test_uc(name_list[i])
i = i + 1
except Exception as e:
print(e)
time.sleep(STIME)
浙公网安备 33010602011771号