• APP前置代码脚本等基础操作及安装python库


    APP自动化前置代码:

    #导入包
    from appium import webdriver
    import time
    desired_caps = {}
    desired_caps['platformName'] = 'Android' # Android系统 or IOS系统

    desired_caps['platformVersion'] = '6.0.1' # Android系统版本
    desired_caps['deviceName'] = '1' # (安卓随便写,苹果的写系统的型号)
    desired_caps['appPackage'] = 'com.android.settings' # APP真机包名
    desired_caps['appActivity'] = 'com.oppo.settings.SettingsActivity' # APP启动微信Activity

    desired_caps['noReset'] = True # 每次打开APP不开启重置,否则每次都进入四个欢迎页

    desired_caps["unicodeKeyboard"] = True #解决中文不能 输入
    desired_caps["resetKeyboard"] = True # 隐藏键盘

    driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) # 启动APP
    #等待时间
    time.sleep(3)
    二、ID定位:
    #通过ID找到元素
    ele = driver.find_element_by_id("android:id/icon")
    ele.click()

    三、class定位:
    #通过class定位
    ele = driver.find_element_by_class_name("android.widget.TextView")

    ele.click()

    四、xpath定位:
    属性和值定位:

    ele= driver.find_element_by_xpath('//*[@content-desc="搜索"]')
    # a1=driver.find_element_by_xpath("//*[@text='更多']")
    # a2=driver.find_element_by_xpath("//*[@resource-id = 'com.android.settings:id/title']")
    ele.click()
    五、多元素定位(比单元素多了S,其他都一样)
    # eles = driver.find_elements_by_id("com.android.settings:id/title")
    el=driver.find_elements_by_class_name("android.widget.TextView")
    print(el)
    print(type(el))
    print(len(el))
    六、显示等待:
    
    
    #15秒内 ,每0.5秒去查找
    #导包 from selenium.webdriver.support.wait import WebDriverWait

    #15秒内 ,每0.5秒去查找
    wew = WebDriverWait(driver,15,0.5).until (lambda y:y.find_element_by_xpath('//*[@content-desc="搜索"]'))
    wew.click()
    六、元素操作
    aa.click()#点击
    a1.send_keys("我是勤奋的人啊 ,努力 有错吗hhhh")#输入文字
    time.sleep(4)#暂停4秒
    a1.clear()
    #清空输入
    七、获取元素的属性
    #获取 元素的属性值四种:print(i.get_attribute("name"))
    eles = driver.find_elements_by_class_name("android.widget.TextView")
    for i in eles:
    print(i.get_attribute("name"))
    print("--------------------")
    for i in eles:
    print(i.get_attribute("text"))
    print("--------------------")
    for i in eles:
    print(i.get_attribute("className"))#主意N要大写
    print("--------------------")
    for i in eles:
    print(i.get_attribute("resourceId"))#注意I要大写
    print("--------------------")
    八获取屏幕的坐标
    #获取屏幕上的坐标:print(ss.location)
    ss = driver.find_element_by_id("com.android.settings:id/search")
    print(ss.location)
    九、获取包启动名,再打开 其他 应用
    #获取包名
    print(driver.current_package)
    #获取启动名
    print(driver.current_activity)
    #卸载应用(需要包名)
    driver.remove_app("sogou.mobile.explorer")
    #安装应用(需要路径)
    driver.install_app("package:/system/app/BackupAndRestore")
    显示当前页面的html代码
    print(driver.page_source)
    #5秒返回#App放置后台模拟热(APP暂停5秒在次展示当前的页面)
    driver.background_app(5)
    打开其它应用程序(填入包名和启动名)
    driver.start_activity("com.android.mms","com.android.mms.ui.ConversationList")
    #关闭(但不关闭驱动)
    driver.close_app()
    #退出(关闭驱动)
    driver.quit()
    #10、滑动事件1(往下滑500:driver.swipe(100,1000,100,500)
    根据坐标滑动,后面5000是加个滑动时间5秒
    #声明driver对象
    driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
    #滑动事件(往下滑500)
    driver.swipe(100,1000,100,500,5000)
     11滑动事件2(从存储滑到更多:driver.scroll(an,an1)
    根据属性滑动,有惯性
    注意:滑动是从下往上滑动《存储在下面,更多在上面》
    an = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
    an1= driver.find_element_by_xpath("//*[contains(@text,'更多')]")
    #从存储 滑到更多
    driver.scroll(an,an1)
     12、拖拽事件3(从存储滑动更多:driver.drag_and_drop(an,an1)
    根据属性滑动,没有惯性
    注意:滑动是从下往上滑动《存储在下面,更多在上面》
    an = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
    an1= driver.find_element_by_xpath("//*[contains(@text,'更多')]")

    #从存储 滑到更多两个都可以用
    driver.drag_and_drop(an,an1)
    13滑动总结:
    an = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
    an1= driver.find_element_by_xpath("//*[contains(@text,'更多')]")
    driver.drag_and_drop(an,an1)
    an2= driver.find_element_by_xpath("//*[contains(@text,'用户')]")
    driver.drag_and_drop(an,an2)
    #从存储滑到更多可以,从存储滑到 用户不行,需要重新定位元素存储。
    #从存储 滑到更多,往下滑了三遍
    driver.drag_and_drop(an,an1)
    driver.drag_and_drop(an,an1)
    driver.drag_and_drop(an,an1)
    14、判断是否找到元素(翻页下滑查找元素):(找到为tu,找 不到fs)
    
    
    while True:
    try:
    driver.find_element_by_xpath("//*[contains(@text,'关于平板电脑')]").click()
    break
    except Exception:
    # 翻页往下翻页5秒钟找到“关于平板电脑”找不到就一直华东5秒钟
    driver.swipe(100,1000,100,500,5000)


    #所有关于手机界面的文本框
    eles = driver.find_elements_by_class_name("android.widget.TextView")
    #判断i。text里面有没有找到5.1这个元数
    for i in eles:
    #i每一个元素
    #if i.text == "5.1":
    if "5.1" in i.text:
    print("有!")
    break
    else:
    print("没有!")
     
    15、轻敲(点击3种方试)
    #导入包TouchAction
    from appium.webdriver.common.touch_action import TouchAction

    ss=driver.find_element_by_xpath("//*[contains(@text,'更多')]")
    #轻敲(方法1)tap
    # TouchAction(driver).tap(ss).perform()
    # TouchAction(driver).tap(ss,600,600).perform()
    TouchAction(driver).tap(x=850,y=1500).perform()
    #轻敲2(方法2)press
    # TouchAction(driver).press(ss).release().perform()
    # TouchAction(driver).press(x=564,y=825).release().perform()


    16、长按(#长按WLA:long_press)

    ss=driver.find_element_by_xpath("//*[contains(@text,'WLA')]")
    ss.click()
    #长按WLA:long_press(方法1)
    TouchAction(driver).long_press(ss).perform()
    #长按WLA:long_press(方法2)
    TouchAction(driver).press(ss).perform()


    17、长按 后松手
    ouchAction(driver).press(x=1000,y=1000).wait(5000).release().perform()
     18、如何查看手机(真机的坐标)
    手机关于手机---版本号:长按--进入开发 者模式--打开指针位置
    
    

     19、图案解锁

    #图案解锁:move_to
    TouchAction(driver).press(x=148,y=522).move_to(x=447,y=522).
    move_to(x=748,y=522).move_to(x=748,y=812).
    move_to(x=454,y=1125).move_to(x=150,y=819).release().perform()
    #tap轻敲
    #press按下
    #long_press长按
    #wait等待
    #release松手
    #perform执行
    #知道什么是 链条
    #一堆动作 通过 动作 、动作、动作。perform这一串动作就是链条
    #关于代码过长,在代码后加回车
    20、获取当前时间和分辨率
    #获取手机时间
    print(driver.device_time)
    #获取当前手机的分辨率
    print(driver.get_window_size())

    
    

     21、第二种滑动找元素(屏幕 的 宽来滑动这样就不会滑过头,漏掉元素):

    
    
    while True:
    try:
    driver.find_element_by_xpath("//*[contains(@text,'关于平板电脑')]").click()
    break
    except Exception:
    # 翻页:先查找手机的宽高
    window_width = driver.get_window_size()["width"]
    window_height = driver.get_window_size()["height"]
    # print(window_width)#输出900
    # print(window_height)#输出1600
    start_x = window_width * 0.5
    end_y = window_height * 0.25
    start_y = end_y * 3
    end_x = start_x
    driver.swipe(start_x,start_y,end_x,end_y,5000)
    #所有关于手机界面的文本框
    eles = driver.find_elements_by_class_name("android.widget.TextView")
    # #判断i。text里面有没有找到5.1这个元数
    for i in eles:
    #i每一个元素
    #if i.text == "5.1":
    if "5.1" in i.text:
    print("有!")
    break
    else:
    print("没有!")
    附录:
    #快捷键windows
    #home + end 最左最右 shift选中 control 一个
     22、发送键:driver.keyevent()
    #循环3次,音量加三次(注意先看有 没有设置免打扰模式)
    for i in range(3):
    driver.keyevent(24)
    time.sleep(1)
    #音量减
    driver.keyevent(25)
     为什么加音量是24,减音量键是25;详细请看网站:https://wenku.baidu.com/view/e7d87f87c1c708a1294a440b.html

     23、打开 通知栏:driver.open_notifications()

    #打开通知栏
    driver.open_notifications()

    24、获取 当前网络

     #获取 当前网络
    # print(driver.network_connection)

     

     25,设置 当前网络(设置飞行模式)

    #设置 当前网络(设置飞行模式)方法1
    # driver.set_network_connection(1)
    # #设置 当前网络(设置飞行模式)方法2
    必须先导包:
    from appium.webdriver.connectiontype import ConnectionType
    # driver.set_network_connection(ConnectionType.ALL_NETWORK_ON)
     
    26.截图
     #截图当前页面,保存到当前目录
    driver.get_screenshot_as_file("./aa.png")

    27APP自动化参数化
    #参数化需要导入import pytest;content是变量名,hello,和123456是输入值 系统会自动运行两次
     @pytest.mark.parametrize("content",["hello","123456"])
     
    28、adb命令的使用:

    启动要查看的程序,命令查看当前运行的包名和Activity;windows下用下面这两个:    
    使用查看启动包方法1:adb shell dumpsys window | findstr mCurrentFocus  
    查看启动名和包名方法2:adb shell dumpsys window | findstr mFocusedApp

    Mac和Linux系统下用:adb shell dumpsys window windows | grep mFcousedApp
    启动:adb start-server
    关闭:adb kill-server
    获取设备:adb devices
    adb帮助:adb --help
    获取系统版本:adb shell getprop ro.build.version.release
    卸载手机APP:adb uninstall 包名(com.experitest.simplebrowser)
    获取App启动时间:adb shell am start -W com.experitest.simplebrowser/.WebViewActivity
    TotalTime: 5778(主毫秒要看这个单位)
    设备的型号IOS:instruments -s devices
    设备的型号Android: adb devices

    29.python需要安装的库:

    自动化需要安装的库有:
    安装pytest和allure:    pip install pytest   和  pip install allure-pytest
    cmd执行如下命令:
    安装selenium和Appium:    pip install selenium
                pip install Appium-Python-Client
    Python解析yaml文件:下载安装如下:
                pip3 install -U PyAML
    pytest生成报告的插件:    pip install pytest-html
    卸载安装:
    pip uninstall (库名)
    查看:pip list
    安装键盘事件库:pip install PyUserInput

    没有不会的技术,只有你想不到的技术。。。。。。。。。。。。。。
  • 相关阅读:
    pythonchallenge 解谜 Level 6
    pythonchallenge 解谜 Level 5
    pythonchallenge 解谜 Level 4
    pythonchallenge 解谜 Level 3
    pythonchallenge 解谜 Level 2
    pythonchallenge 解谜 Level 1
    CCF 201912-2 回收站选址
    JavaWeb+JDBC+Servlet+SqlServer实现登录功能
    后台连接数据库的方法
    jQuery实现轮播图
  • 原文地址:https://www.cnblogs.com/zenghongfei/p/11744010.html
Copyright © 2020-2023  润新知