• 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()
  • 相关阅读:
    数据类型装换
    变量及数据类型
    27 网络通信协议 udp tcp
    26 socket简单操作
    26 socket简单操作
    14 内置函数 递归 二分法查找
    15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用
    12 生成器和生成器函数以及各种推导式
    13 内置函数 匿名函数 eval,exec,compile
    10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量
  • 原文地址:https://www.cnblogs.com/xiamaojjie/p/11442336.html
Copyright © 2020-2023  润新知