appium自动化基础总结

Posted xiamaojjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了appium自动化基础总结相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

断断续续学了2周appium自动化,把经常用到基础写出来吧!方便日后便于查看。

appium解决中文无法输入和,启动app自动清除数据的问题。在前置代码里面加上这3句就可以解决。

desired_caps =

    "unicodeKeyboard": "True",  # 使用unicode输入法
"resetKeyboard": "True", # 重置输入法到初始状态
  
"noReset": "True", # 解决启动app自动清除数据的问题,加这句让app启动不清除原有数据


安装apk到手机


driver.install_app("D:\\\\download\\\\38193ab216f29fdc9243bd8c39b65f95.apk") #后面跟apk路径

移除app
driver.remove_app(‘com.ibox.calculators‘) #参数填包名
判断app是否安装在手机上,参数填包名
result = driver.is_app_installed(‘com.ibox.calculators‘)

获取当前页面的文档结构,用来做断言
print(driver.page_source)

断言元素是否存在页面中
if ‘更多‘ in driver.page_source:
print(‘成功,存在‘)
else:
print(‘错误,不存在‘)

隐式等待
driver.implicitly_wait(30)


获取包名和appActivity

1,先打开获取包名的app
2,adb shell
3, dumpsys activity | grep mFocusedActivity 获取到包名和
appActivity

获取屏幕大小
size = driver.get_window_size()


定位方法截图:
技术图片

技术图片


后续补充的代码
# todo 实现appium1.9版本自动登录美逛的功能
from appium import webdriver
import time


class OpenMg():
    ‘‘‘自动登录美逛app‘‘‘

    def __init__(self):
        ‘‘‘打开APP及初始化工作‘‘‘
        desired_caps = 
            "platformName": "android",
            "platformVersion": "5.1",
            "deviceName": "127.0.0.1:62001",
            "appPackage": "com.xk.span.zutuan",
            "appActivity": ".module.main.ui.activity.MainActivity",
            # "appWaitActivity": ".module.main.ui.activity.MainActivity",
            "unicodeKeyboard": "True",  # todo 屏蔽键盘,解决appium不能输入中文的问题
            "resetKeyboard": "True",
             "noReset":"True"     # todo 启动app时不要清除app里的原有的数据
        
        self.driver = webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps)
        self.driver.implicitly_wait(30)

    def slide_pafe(self):
        ‘‘‘实现界面滑动的功能‘‘‘

        # todo swipe参数说明,(x轴起始位置,y轴起始,x轴结束,y轴结束,最后一个参数是滑动速度,可不填)
        ‘‘‘
        # todo 从下往上滑,起始y1比结束坐标y2大,差距越大,滑动距离越大,
        # TODO 从上往下滑,起始y1比结束坐标y2小,差距越大,滑动距离越大
        # todo 从左往右滑,起始x1比结束坐标x2大,差距越大,滑动距离越大
        # TODO 从右往左滑,起始x1比结束坐标x2小,差距越大,滑动距离越大
        ‘‘‘
        # 滑动首页图片进入首页
        for i in range(4):
            self.driver.swipe(972, 386, 108, 386, 500)
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_class_name(android.widget.ImageView).click()
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_id(com.xk.span.zutuan:id/image_canclePlay).click()
        self.driver.implicitly_wait(30)

    def register_page(self):
        ‘‘‘由注册切换到输入账号界面‘‘‘
        self.driver.find_element_by_id(com.xk.span.zutuan:id/tv_tab_txt4).click()
        self.driver.find_element_by_id(com.xk.span.zutuan:id/stv_user_un_login).click()
        self.driver.find_element_by_id(com.xk.span.zutuan:id/stv_login_mobile).click()

    def input_account(self, phone, password):
        ‘‘‘输入账号密码到首页界面‘‘‘
        self.phone = phone
        self.driver.find_element_by_id(com.xk.span.zutuan:id/et_mobile).send_keys(phone)
        self.driver.find_element_by_id(com.xk.span.zutuan:id/password).click()
        self.driver.find_element_by_id(com.xk.span.zutuan:id/et_password).send_keys(password)
        self.driver.find_element_by_xpath(//*[@text="登录"]).click()
        time.sleep(0.3)

    def switch(self):
        ‘‘‘首页切换到个人中心‘‘‘
        self.driver.find_element_by_xpath(//*[@text="个人中心"]).click()
        time.sleep(0.3)

    def finally_result(self):
        ‘‘‘断言结果是否正确,账号是否在当前元素界面‘‘‘
        if self.phone in self.driver.page_source:
            print(账号正确,登录成功)
        else:
            print(账号错误,登录失败)

    def click_exit(self):
        ‘‘‘点击退出,清理登录信息‘‘‘
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_id(com.xk.span.zutuan:id/iv_user_logout).click()
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_xpath(//*[@text="确定"]).click()
        time.sleep(1)

    def closed(self):
        ‘‘‘关闭驱动对象‘‘‘
        time.sleep(1)
        self.driver.quit()


def run1():
    ‘‘‘根据操作顺序,调用方法执行‘‘‘
    mg = OpenMg()
    mg.slide_pafe()
    mg.register_page()
    mg.input_account(1582, mg123456)
    mg.switch()
    mg.finally_result()
    mg.click_exit()
    mg.closed()


class SearchGoods(OpenMg):
    ‘‘‘搜索商品‘‘‘

    def input_goods(self, content):
        ‘‘‘操作搜索框及输入商品搜索‘‘‘
        self.content = content
        self.driver.find_elements_by_class_name(android.widget.TextView)[0].click()
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_xpath(//*[@text="搜索关键词或粘贴淘宝标题"]).send_keys(self.content)
        time.sleep(0.5)
        self.driver.find_element_by_id(com.xk.span.zutuan:id/tv_search_submit).click()
        # self.driver.swipe(108, 1800, 108, 200, 500)
        # self.driver.swipe(108, 200, 108, 800, 500)
        time.sleep(1)

    def finally_result(self):
        ‘‘‘断言结果是否正确,账号是否在当前元素界面‘‘‘
        if self.content in self.driver.page_source:
            print(搜索商品正确,测试成功)
        else:
            print(搜索商品错误,测试失败)
        self.driver.implicitly_wait(30)

        # super().closed()

    def home_pege(self):
        ‘‘‘搜索界面返回到首页‘‘‘
        self.driver.find_element_by_id(com.xk.span.zutuan:id/iv_back).click()
        self.driver.find_element_by_id(com.xk.span.zutuan:id/iv_back).click()


def run2():
    ‘‘‘根据操作顺序调用方法执行‘‘‘
    sg = SearchGoods()
    sg.slide_pafe()
    sg.register_page()
    sg.input_account(158, mg123456)
    sg.input_goods(短袖)
    sg.finally_result()
    sg.home_pege()
    sg.switch()
    sg.click_exit()
    sg.closed()


class Filter_Goods(SearchGoods):
    ‘‘‘筛选商品‘‘‘

    def filter(self,price1,price2):
        ‘‘‘对筛选框的操作‘‘‘
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_xpath(//*[contains(@text,"筛选")]).click()
        self.driver.find_element_by_xpath(//*[contains(@text,"最低价")]).send_keys(price1)
        self.driver.find_element_by_xpath(//*[contains(@text,"最高价")]).send_keys(price2)
        self.driver.implicitly_wait(30)
        self.driver.find_element_by_id(com.xk.span.zutuan:id/ok).click()


def run3():
    fg = Filter_Goods()
    fg.slide_pafe()
    fg.register_page()
    fg.input_account(1582, mg123456)
    fg.input_goods(书包)
    fg.filter(30,100)
    fg.finally_result()
    fg.home_pege()
    fg.switch()
    fg.click_exit()
    fg.closed()


def main():
    run1()
    run2()
    run3()


if __name__ == __main__:
    main()

 

以上是关于appium自动化基础总结的主要内容,如果未能解决你的问题,请参考以下文章

移动端自动化测试之 Appium+Pyhton环境准备篇

appium滑动操作总结

Appium移动端自动化:Appium-Desktp的使用以及定位元素方式总结

Mac + Appium学习之常用的IOS自动化测试API总结

[转]APPium搭建二:安装Appium

移动端自动化测试 Appium 框架之数据驱动