本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/112169770
今天来分享下,app自动化脚本 我的实际应用:企业微信打卡、快手刷金币。
个人博客:https://blog.csdn.net/zyooooxie
需求 + 解决思路
快手刷金币
这个需求详情:运行快手app,滑动页面,赚金币;
最终实现的思路:
- 手机插到电脑;
- 启动appium server;
- 触发脚本,启动app,随机时间 滑动【一直持续进行】;
企微打卡
这个需求详情:
- 上班:周一到周五 早上某时间点 触发;启动app,自动打卡;
- 下班:走人时,触发,自动延期半小时 启动app,定位元素,打卡;
最终实现的思路:
【上班】
- 企微 上班已设置快捷打卡;
- 电脑,安装Tomcat,部署Jenkins,构建的任务 Build periodically;
- Jenkins的Job定时构建后,随机 <= 15分钟,启动脚本;
- 启动app;快捷打卡;
【下班】
- 执行bat文件,创建本机的任务;
- 任务的执行时间为 触发bat文件的半小时后;
- 任务执行,跑app脚本,定位元素,下班打卡;
com.kuaishou.nebula
代码
为了减少麻烦,我把部分值做了替换
from appium import webdriver
from time import sleep
import random
class KuaiShou(object):
def desired(self):
desired_caps = dict()
desired_caps['platformName'] = 'zyooooxie'
desired_caps['platformVersion'] = 'zyooooxie'
desired_caps['deviceName'] = 'zyooooxie'
desired_caps['appPackage'] = 'com.kuaishou.nebula'
desired_caps['appActivity'] = 'zyooooxie'
desired_caps['noReset'] = True
desired_caps['newCommandTimeout'] = 600
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)
return driver
def start_app_slip(self):
dr = self.desired()
# print(dr.get_window_size())
while True:
sleep(random.randint(25, 45))
dr.swipe(500, 1900, 500, 400, 1000)
启动 appium server
这儿说的是 appium-desktop;
com.tencent.wework
代码
为了减少麻烦,我换了个写法
class BasePage(object):
def appium_desired(self, devices='phone'):
desired_data = CommonFun.read_config(devices)
desired_data = {d[0]: d[1] for d in desired_data}
desired_caps = deepcopy(desired_data)
desired_caps.update({'noReset': eval(desired_data['noReset'])})
desired_caps.update({'unicodeKeyboard': eval(desired_data['unicodeKeyboard'])})
desired_caps.update({'resetKeyboard': eval(desired_data['resetKeyboard'])})
desired_caps.update({'newCommandTimeout': eval(desired_data['newCommandTimeout'])})
desired_caps.pop('ip')
desired_caps.pop('port')
print(desired_caps)
# desired_caps.update({'settings[waitForIdleTimeout]': 5000})
driver = webdriver.Remote("http://{}:{}/wd/hub".format(desired_data['ip'], desired_data['port']), desired_caps)
driver.implicitly_wait(15)
return driver
pytest的conftest.py
@pytest.fixture(scope='function')
def driver():
warnings.simplefilter('ignore', ResourceWarning)
return_driver = BasePage().appium_desired(devices='phone')
print('driver start...')
yield return_driver
return_driver.close_app()
return_driver.quit()
print('driver end...')
上班的用例,随便写点 即可 【主要是启动app】;
下班的用例,要定位元素,模拟人的"点点点";
page_go_off.py
from appium.webdriver.common.mobileby import MobileBy
from common_functions.base_method import BaseMethod
class PageGoOff(BaseMethod):
gongzuotai = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("工作台")')
daka = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("打卡")')
xiabandaka = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("下班打卡").resourceId("com.tencent.wework:id/a5p")')
@allure.epic('app测试报告')
@allure.feature('模块:GoOff')
class TestGoOff(PageGoOff):
@allure.title('下班')
@allure.description('追求自由')
def test_go_1(self, driver):
# driver.find_element_by_android_uiautomator(self.gongzuotai[1]).click()
self.find_element_and_wait(driver, *self.gongzuotai).click()
self.find_element_and_wait(driver, *self.daka).click()
abc = self.find_element_and_wait(driver, *self.xiabandaka)
Log.info(abc.text)
abc.click()
sleep(5)
Log.info('++++++++++++++++++++')
jenkins的Job、计划任务
实际写了,也没咋用;我本就有2个手机,“工作机” 装的企微,在跑下班脚本报错:死活找不到元素;
有些提醒:
- 手机 不可锁屏
- 手机别设置 自动关机
- 手机数据线 好用些
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie