1、配置小程序
coding:utf-8
author = ‘lili’
‘’’
description:driver配置
‘’’
import time
from appium import webdriver
class driver_configure():
@property
def get_driver(self):
# 获取driver
try:
desired_caps = {}
desired_caps[‘platformName’] = ‘Android’ # 平台
desired_caps[‘platformVersion’] = ‘23’ # 系统版本
desired_caps[‘deviceName’] = ‘c3756aa**’ # 设备名称
desired_caps[‘appPackage’] = ‘com.tencent.mm’ # APK包名
desired_caps[‘appActivity’] = ‘com.tencent.mm.ui.LauncherUI’ # 被测程序启动时的Activity
desired_caps[‘unicodeKeyboard’] = ‘true’ # 是否支持unicode的键盘。如果需要输入中文,要设置为“true”
desired_caps[‘resetKeyboard’] = ‘true’ # 是否在测试结束后将键盘重置为系统默认的输入法。
desired_caps[‘newCommandTimeout’] = ‘120’ # Appium服务器待appium客户端发送新消息的时间。默认为60秒
desired_caps[‘noReset’] = True # true:不重新安装APP,false:重新安装app
desired_caps[‘automationName’] = ‘uiautomator2’
desired_caps[‘chromeOptions’] = {‘androidProcess’: ‘com.tencent.mm:appbrand’} # 当前小程序运行的进程
self.driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub’, desired_caps)
time.sleep(5)
return self.driver
except Exception as e:
print(‘启动失败’)
raise e
2、uiautomatorviewer页面元素定义
coding:utf-8
author = ‘lili’
‘’’
description:元素定义
‘’’
from common import Base_page
from appium.webdriver.common import mobileby
import time
class swipe_page(Base_page.Base_page):
by = mobileby.MobileBy()
item_fx = (by.XPATH, “//android.widget.TextView[@text=‘发现’]”) # 点击“发现”
item_xcx = (by.NAME, “小程序”) # 点击小程序
item_wdxcx = (by.NAME, “我的小程序”) # 点击我的小程序
item_kjxs = (by.NAME, “科技线上”) # 点击科技线上
def click_fx(self):
self.find_element(*self.item_fx).click() # 点击“发现”
def click_xcx(self):
self.find_element(*self.item_xcx).click() # 点击小程序
time.sleep(3)
self.find_element(*self.item_wdxcx).click() # 点击我的小程序
time.sleep(3)
self.find_element(*self.item_kjxs).click() # 点击科技线上
def swipe_down(self, n): # # 向下滑动
x = self.driver.get_window_size()['width']
y = self.driver.get_window_size()['height']
for i in range(n):
self.driver.swipe(x / 2, y * 3 / 4, x / 2, y / 4)
def swipe_up(self, n):
'''上滑'''
x = self.driver.get_window_size()['width']
y = self.driver.get_window_size()['height']
for i in range(n):
self.driver.swipe(x / 2, y / 4, x / 2, y * 3 / 4)
3、启动小程序,以及具体的test_case
coding:utf-8
author = ‘lili’
‘’’
description:
‘’’
import unittest
from common import driver_configure
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from src.pages.weixin_page import swipe_page
from src.pages.jfhome_page import home_page
from src.pages.wode_page import wode_page
from src.pages.itemdetail_page import detail_page
from src.pages.ConfirmationOrder_page import Confirmation_page
from src.pages.dhchenggong_page import chenggong_page
from src.pages.orderdetail_page import orderdetail_page
class test_jfsch(unittest.TestCase):
@classmethod
def setUpClass(cls):
dconfigur = driver_configure.driver_configure()
cls.driver = dconfigur.get_driver
'''
def test_01qidong(self):
''滑动进入微信启动小程序''
#self.driver.find_element_by_android_uiautomator('text("微信")').click() # 点击微信Tab
self.swipe_page = swipe_page(self.driver)
self.swipe_page.swipe_up(1) # 屏幕向上滑动
time.sleep(5)
self.driver.find_element_by_name("科技线上").click() # 点击顶部的图标"科技线上"进入小程序
time.sleep(5)
print(self.driver.contexts) # 打印当前所有的上下文
'''
def test_01qidong(self):
'''从发现进入微信启动小程序'''
print('启动积分商城小程序')
self.swipe_page = swipe_page(self.driver)
self.swipe_page.click_fx() # 点击发现
#self.swipe_page.swipe_down(1)
self.swipe_page.click_xcx() # 启动小程序
time.sleep(5)
print(self.driver.contexts) # 打印当前所有的上下文
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/1启动积分商城小程序.png')
self.home_page = home_page(self.driver)
self.assertEqual('首页', self.home_page.get_text())
print('当前总积分数: ', self.home_page.get_zjf())
print('获取当前总积分并转换成int型: ', int(self.home_page.get_zjf()[:-2])) # 截取从头开始到倒数第二个字符之前的数据,并转化成int型
#print('购买商品后的积分数: ', int(self.home_page.get_zjf()[:-2]) - 4)
def test_02login(self):
'''登录小程序'''
source = self.driver.page_source
element = '登录后显示当前积分'
print(source)
if element in source:
self.home_page = home_page(self.driver)
self.home_page.click_wd()
self.wode_page = wode_page(self.driver)
self.wode_page.click_image()
time.sleep(3)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/2登录积分商城小程序.png')
self.assertEqual('18618481247', self.wode_page.get_phone()) # 查找ID元素,存在则直接返回
self.home_page.click_wd() # 点击首页
return True
else:
print('登录成功')
return False # 不存在则返回False
def test_03create(self):
'''纯积分兑换下单'''
self.home_page = home_page(self.driver)
Total_jf = int(self.home_page.get_zjf()[2:-2]) # 截取从头开始到倒数第二个字符之前的数据,并转化成int型
print('当前总积分数只显示数字: ', Total_jf)
#self.home_page.click_sy()
time.sleep(3)
print(self.driver.get_window_size())
self.home_page.swipeDown()
self.home_page.click_goods1()
time.sleep(2)
self.detail_page = detail_page(self.driver)
print(self.driver.contexts) # 打印当前所有的上下文
self.driver.switch_to.context("NATIVE_APP") # 切换上下文
print(self.driver.current_context) # 打印当前的上下文
self.detail_page.click_dh() # 立即兑换
self.confirm_page = Confirmation_page(self.driver)
self.confirm_page.click_dh() # 点击确认兑换
time.sleep(3)
self.chenggong_page = chenggong_page(self.driver)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/3纯积分兑换下单成功,积分减少.png')
self.assertEqual('兑换成功', self.chenggong_page.get_dhcg())
#self.chenggong_page.click_jxdh() # 点击按钮 继续兑换,返回首页列表
self.chenggong_page.click_dhxq() # 点击按钮 兑换详情,进入兑换详情页面
time.sleep(3)
self.orderdetail = orderdetail_page(self.driver)
order_jf = int(self.orderdetail.get_zj()[5:-2]) # 获取订单商品积分数
print('查看订单商品总价: ', order_jf) # 截取从头开始到倒数第二个字符之前的数据,并转化成int型
Current_jf = Total_jf - order_jf # 购买商品后的积分数
print('购买商品后的积分数: ', Current_jf)
self.orderdetail.click_jxdh() # 点击按钮 继续兑换,返回首页列表
time.sleep(3)
print('当前总积分数: ', self.home_page.get_zjf())
Total_jf1 = int(self.home_page.get_zjf()[2:-2])
print(Current_jf)
print(Total_jf1)
if Current_jf == Total_jf1:
print('总积分减少计算正确')
else:
print('总积分减少计算不正确')
def test_04create(self):
'''积分+金额兑换线上支付下单'''
self.home_page = home_page(self.driver)
#self.home_page.click_sy()
time.sleep(3)
#self.home_page.swipe_down(1)
self.home_page.click_goods2()
time.sleep(3)
self.detail_page = detail_page(self.driver)
# print(self.driver.contexts) # 打印当前所有的上下文
#self.driver.switch_to.context("NATIVE_APP") # 切换上下文
# print(self.driver.current_context) # 打印当前的上下文
self.detail_page.click_dh() # 立即兑换
self.confirm_page = Confirmation_page(self.driver)
self.confirm_page.click_dh() # 点击确认兑换
time.sleep(5)
self.driver.back()
self.chenggong_page = chenggong_page(self.driver)
#self.chenggong_page.click_gb()
#self.driver.back()
time.sleep(3)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/4积分+金额兑换线上支付下单成功.png')
self.assertEqual('订单等待支付', self.chenggong_page.get_dzf())
self.driver.back()
self.driver.back()
def test_05create(self):
'''积分+金额兑换线下支付下单'''
self.home_page = home_page(self.driver)
# self.home_page.click_sy()
time.sleep(3)
# self.home_page.swipe_down(1)
self.home_page.click_goods2()
time.sleep(3)
self.detail_page = detail_page(self.driver)
# print(self.driver.contexts) # 打印当前所有的上下文
# self.driver.switch_to.context("NATIVE_APP") # 切换上下文
# print(self.driver.current_context) # 打印当前的上下文
self.detail_page.click_dh() # 立即兑换
self.confirm_page = Confirmation_page(self.driver)
self.confirm_page.click_zffs() # 选择支付方式 线下支付
self.confirm_page.click_dh() # 点击确认兑换
time.sleep(3)
self.chenggong_page = chenggong_page(self.driver)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/5积分+金额兑换线下支付下单成功.png')
self.assertEqual('兑换成功', self.chenggong_page.get_dhcg())
self.chenggong_page.click_jxdh() # 点击按钮 继续兑换,返回首页列表
def test_06create(self):
'''同一个商品兑换多个'''
self.home_page = home_page(self.driver)
# self.home_page.click_sy()
time.sleep(3)
# self.home_page.swipe_down(1)
self.home_page.click_goods1() # 点击商品
time.sleep(3)
self.detail_page = detail_page(self.driver)
self.detail_page.click_tzdh() # 添加商品并立即兑换
time.sleep(3)
self.confirm_page = Confirmation_page(self.driver)
self.confirm_page.click_dh() # 点击确认兑换
time.sleep(3)
self.chenggong_page = chenggong_page(self.driver)
#self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/6同一个商品兑换多个.png')
#self.assertEqual('兑换成功', self.chenggong_page.get_dhcg())
self.chenggong_page.click_dhxq() # 点击按钮 兑换详情
time.sleep(3)
self.orderdetail = orderdetail_page(self.driver)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/6同一个商品兑换多个.png')
self.assertEqual('商品总价:4积分', self.orderdetail.get_zj()) # 获取订单总价
self.orderdetail.click_jxdh() # 点击按钮 继续兑换,返回首页列表
def test_07create(self):
'''取消积分兑换,积分退还'''
# time.sleep(20)
self.home_page = home_page(self.driver)
Total_jf = int(self.home_page.get_zjf()[2:-2]) # 截取从头开始到倒数第二个字符之前的数据,并转化成int型
print('当前总积分数: ', Total_jf)
# self.home_page.click_sy()
time.sleep(3)
print(self.driver.get_window_size())
#self.home_page.swipeDown()
self.home_page.click_goods1()
time.sleep(3)
self.detail_page = detail_page(self.driver)
print(self.driver.contexts) # 打印当前所有的上下文
self.driver.switch_to.context("NATIVE_APP") # 切换上下文
print(self.driver.current_context) # 打印当前的上下文
self.detail_page.click_dh() # 立即兑换
self.confirm_page = Confirmation_page(self.driver)
self.confirm_page.click_dh() # 点击确认兑换
time.sleep(3)
self.chenggong_page = chenggong_page(self.driver)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/3纯积分兑换下单成功,积分减少.png')
self.assertEqual('兑换成功', self.chenggong_page.get_dhcg())
# self.chenggong_page.click_jxdh() # 点击按钮 继续兑换,返回首页列表
self.chenggong_page.click_dhxq() # 点击按钮 兑换详情,进入兑换详情页面
time.sleep(3)
self.orderdetail = orderdetail_page(self.driver)
'''
order_jf = self.orderdetail.get_zj() # 获取订单商品积分数
print('查看订单商品总价: ', int(order_jf[5:-2])) # 截取从头开始到倒数第二个字符之前的数据,并转化成int型
Current_jf = int(Total_jf[:-2]) - int(order_jf[5:-2]) # 购买商品后的积分数
print('购买商品后的积分数: ', Current_jf)
'''
self.orderdetail.click_qxdh() # 点击按钮 取消兑换
time.sleep(2)
self.assertEqual('订单取消成功 积分已退还', self.orderdetail.get_status())
self.assertEqual('已取消', self.orderdetail.get_status1())
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/7取消积分兑换,积分退还.png')
self.orderdetail.click_jxdh() # 点击按钮 继续兑换,返回首页列表
time.sleep(3)
print('当前总积分数: ', self.home_page.get_zjf())
Total_jf1 = int(self.home_page.get_zjf()[2:-2])
print(Total_jf)
print(Total_jf1)
if Total_jf == Total_jf1:
print('总积分减少计算正确')
else:
print('总积分减少计算不正确')
def test_08create(self):
'''修改自提门店下单'''
#time.sleep(20)
self.home_page = home_page(self.driver)
Total_jf = int(self.home_page.get_zjf()[2:-2]) # 截取从头开始到倒数第二个字符之前的数据,并转化成int型
print('当前总积分数只显示数字: ', Total_jf)
#self.home_page.click_sy()
time.sleep(3)
print(self.driver.get_window_size())
#self.home_page.swipeDown()
self.home_page.click_goods1()
time.sleep(4)
self.detail_page = detail_page(self.driver)
self.detail_page.modify_store() # 修改自提门店
self.detail_page.click_dh() # 立即兑换
time.sleep(2)
self.confirm_page = Confirmation_page(self.driver)
self.confirm_page.click_dh() # 点击确认兑换
time.sleep(3)
self.chenggong_page = chenggong_page(self.driver)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/3纯积分兑换下单成功,积分减少.png')
self.assertEqual('兑换成功', self.chenggong_page.get_dhcg())
self.chenggong_page.click_dhxq() # 点击按钮 兑换详情,进入兑换详情页面
time.sleep(3)
self.orderdetail = orderdetail_page(self.driver)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/8修改自提门店下单成功.png')
self.assertIn('高济北京线上001', self.orderdetail.get_store()) # 获取自提门店
self.orderdetail.click_jxdh() # 点击按钮 继续兑换,返回首页列表
time.sleep(3)
print('当前总积分数: ', self.home_page.get_zjf())
def test_09create(self):
'''减少商品toast提示“亲,不能再少了”'''
self.home_page = home_page(self.driver)
# self.home_page.click_sy()
time.sleep(3)
# self.home_page.swipe_down(1)
self.home_page.click_goods1() # 点击商品![在这里插入图片描述](https://img-blog.csdnimg.cn/20200102152333367.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpeWFuZzg3MDkxMQ==,size_16,color_FFFFFF,t_70)
time.sleep(3)
self.detail_page = detail_page(self.driver)
self.detail_page.click_jsh() # 减少商品,弹出toast提醒
# self.detail_page.find_toast("亲,不能再少了", 10, 0.01)
self.driver.get_screenshot_as_file('D:/python/pyth-workspace/xiaochengxu/screenshot/9减少商品toast提示.png')
self.driver.back()
self.home_page.swipeUp()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if name==‘main’:
unittest.main()
4、结果图