抢菜自动化实验--基于ui

一.简单介绍(自言自语)

原理:python通过appium服务器操作sdk,模拟人工点击app的操作。

优点:机器点击速度远远高于人类,抢菜有很大优势

待改进点

        ui自动化模拟的是人的操作,需要等待页面元素加载完后才可以操作,所以速度还不够快。

        如果使用接口自动化,直接调用接口传参数给服务器,可以节省等待页面加载的时间,大大提高速度,缺点是难度大一些,需要抓包检查。

二.买菜app业务分析

        思维导图罗列出了可能需要操作的页面元素,以及对应的标签,方便页面定位时取用。

三.代码

        写的很简单粗暴,有很多需要改进的地方,但是目前能用,就先凑合用。后面可以用wxpython增加简单的图形界面,增加可交互性。最好是采用接口的方式。

# 使用说明:要么保持账号登录,直接运行脚本;要么使用手机号注册叮咚买菜,登录模块会自动调用一键登录
# 所有的菜加入购物车后运行脚本即可,但是不能勾选‘全选’,不然会造成二次重复点击,造成选中失败报错闪退
import time
from appium.webdriver.webdriver import WebDriver
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

class test1():
    def __init__(self):
        # 使用初始化方法设置参数
        self.caps = {}
        self.caps["automationName"] = "UiAutomator2"
        self.caps['platformName'] = 'Android'
        self.caps['platformVersion'] = '11'
        self.caps['deviceName'] = 'aitgxct4899xfqci'
        self.caps['appPackage'] = 'com.yaya.zone'
        self.caps['appActivity'] = '.activity.HomeActivity t322'
        self.caps['noReset'] = 'True'
        self.driver = WebDriver('http://127.0.0.1:4723/wd/hub', self.caps)
        self. driver.implicitly_wait(10)

    # 登录模块
    def login(self):
        # 点击我的
        self.driver.find_element_by_id('com.yaya.zone:id/ani_mine').click()
        # 点击立即登录
        self.driver.find_element_by_id('com.yaya.zone:id/nickName').click()
        # 点击同意
        self.driver.find_element_by_id('com.yaya.zone:id/cb_onelogin_privacy').click()
        # 勾选确认
        self.driver.find_element_by_id('com.yaya.zone:id/cb_onelogin_privacy').click()
        # 点击本机号码一键登录
        self.driver.find_element_by_id('com.yaya.zone:id/btn_one_login').click()

    def cart(self):
        # 购物车模块
        # 点击购物车
        self.driver.find_element_by_id('com.yaya.zone:id/ani_car').click()
        # 点击全选
        self.driver.find_element_by_id('com.yaya.zone:id/cb_all').click()
        # 拒绝商家赠送的小葱。有时候送,有时候不送,导致页面不稳定,注释掉了。
        # driver.find_element_by_id('com.yaya.zone:id/tv_button1').click()
        # 点击去结算
        self.driver.find_element_by_id('com.yaya.zone:id/btn_submit').click()

    # 支付模块
    def pay(self):
        # 点击选择时间。注释掉是因为app默认选择最快送达。如果要指定时间,可以解除注释
        # self.driver.find_element_by_xpath('//android.widget.TextView[@text="请选择送达时间"]').click()
        # # # 选择第2个送达时间(最早的时间排在第一)
        # self.driver.find_element_by_xpath('[@resource-id=‘com.yaya.zone:id/rv_selected_hour’]/android.view.ViewGroup[2]').click()
        # 提交订单
        print('尝试提交订单,输入校验密码')
        self.driver.find_element_by_id('com.yaya.zone:id/tv_submit').click()
        self.driver.find_element_by_id('com.yaya.zone:id/passEditText').send_keys('替换自己的密码')
        i=1
        while True:
            try:
                self.driver.find_element_by_id('com.yaya.zone:id/tv_submit').click()
            except Exception as e:
                print('提交失败,即将重新提交')
            finally:
                print("第%s次重新提交订单" % i)
                i+=1

    def start_time(self,n):
        pass

if __name__ == '__main__':
    obj=test1()
    obj.cart()
    obj.pay()

四.遇到的问题

1.环境的搭建。app自动化麻烦一点的是环境的搭建,感觉相对接口和web麻烦。本次使用java1.9的版本不兼容sdk,更换java1.8后解决。安卓11现在支持无线调试,很好用,不用买扩展坞了。

2.andorid 8.0以后的版本更新,导致2个问题:

        a:adb寻找当前app活动程序命令变了:

                解决:安卓8.0前:
                           adb shell dumpsys activity activities | findstr mFocusedActivity
                            安卓8.0后,
                           adb shell dumpsys activity activities | findstr mResumedActivity 

        b.uiaotomator工具无法定位,报错:

        

                解决:手工截取uix和png文件保存到手机,转移到电脑,用uiaotomator打开

                                1.截图uix存手机
                                adb shell uiautomator dump /sdcard/password.uix
                                2.uix从手机传到电脑
                                adb pull /sdcard/password.uix  D:\UiTest
                                3.截图png传手机
                                adb shell screencap  -p /sdcard/password.png
                                4.png从手机传到电脑
                                adb pull /sdcard/password.png  D:\UiTest

                                 5.打开方法如下:

                                        

 3.如果提示没有权限。用chmod 777 文件名  更改文件权限即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值