元素定位、元素操作、手势滑屏、其他延伸

一、元素定位

  1、代码启动说明(用pycharm启动)

    移动自动化启动 app 基础脚本

 

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"

#安卓不检测内容,随便写,但不能为空
desired_caps["deviceName"] = "192.168.56.101:5555" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" #设置中文 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True #获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

    初始化参数介绍

 

  2、基础 API (启动应用、获取包名、启动名)

    1、应用跳转(如:先打开 设置 应用程序,再跳转到 短信 应用程序)

      方法:driver.start_activity(appPackage,appActivity)     (分别为:程序包名,程序界面名)

    

    2、获取包名 和 界面名(如:打开设置界面,获取包名和界面名)

      方法:

        #获取包名:driver.current_package

        #获取界面名:driver.current_activity

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#启动短信
driver.start_activity("com.android.messaging","ui.conversationlist")
#打印包名启动名
print(driver.current_package)
print(driver.current_activity)

 

  3、安装、卸载、是否安装、置于后台、关闭

    1、安装、卸载、是否安装

 

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#判断应用是否安装
if driver.is_app_installed("com.yunmall.lc"):
    #卸载
    driver.remove_app("com.yunmall.lc")
else:
    #安装
    driver.install_app("bain_115.apk")         #放置路径,电脑上的路径

#启动设置界面
driver.start_activity("com.android.settings",".Settings")

#置于后台
driver.background_app(3) #置于后台3秒

#关闭设置
driver.close_app()

#关闭驱动
driver.quit()

 

    2、定位单个元素(使用 uianto 工具截图查看)

 

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#使用id 定位,定位设置里面的放大镜
driver.find_element_by_id("com.android.settings:id/content_parent").click()

#使用class 定位输入 hello
driver.find_element_by_id("com.android.EditText").send_keys("hello")

#点击返回使用xpath
driver.find_element_by_xpath("//*[@class='android.widget.ImageButton]").click()

#使用name定位
driver.find_element_by_accessibility_id("搜索设置").click()

driver.quit()

 

    3、定位一组元素

 

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#获取所有 id 为 com.android.settings:id/title 的元素
els = driver.find_elements_by_id("com.android.settings:id/title")
for el in els:
    print(el.text)
    
els = driver.find_element_by_class_name("android.widget.TextView")
for el in els:
    print(el.text)
    
els = driver.find_elements_by_xpath("*[contains(@text,'设')]")
for el in els:
    print(el.text)
    
driver.quit()

 

 二、元素操作

  1、元素操作 API

 

  2、获取元素信息 -- 文本、位置、大小

    对于 location 的结果为(x,y): x 表示屏幕左边到框左边的距离。y 表示,屏幕上边框到框上方的距离。

    所以当获取了文本框的位置和大小后,计算文本框触摸中心点:location.get("x") + size.get("width") 二者的和 除以 2。同理高为 location.get("y") + size.get("height") 除以 2

 

  3、获取元素属性值

    记住图片右下方,属性值对应的属性名和实际的 ui 显示不一致,结合代码示例看。

 

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#获取所有 id 为 com.android.settings:id/title 的元素
els = driver.find_elements_by_id("com.android.settings:id/title")
for el in  els:
    print(el.get_attribute("enable"))
    print(el.get_attribute("text"))
    print(el.get_attribute("name"))
    print(el.get_attribute("resourceId"))
    print(el.get_attribute("className"))

driver.quit()

 

 三、手势滑动屏幕

  1、滑动(两个坐标点精准滑动)

 

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

# 滑动 5 屏幕
i = 0
while i <= 5:
    driver.swipe(920,220,200,200)
    i += i
driver.find_element_by_xpath("//*[text='健康']").click()

driver.quit()

 

  2、滚动

    origin_el:为滑动开始的元素。     destination_el:滑动结束的元素

    scroll 滑动:从一个元素滑动到另一个元素。直到页面自动停止。适合滑动一次的操作(有惯性且很大)

      方法:driver.scroll(origin_el,destination_el)     

    drag_and_drop拖拽:从一个元素滑动到另一个元素,第二个元素替代第一个元素位置。(无惯性)

      方法:driver.drag_and_drop(origin_el,destination_el)

from appium import webdriver

#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

# 滑动
el1 = driver.find_element_by_xpath("//*[text='健康']")
el2 = driver.find_element_by_xpath("//*[text='更多']")

#操作滑动
driver.scroll(el1,el2)
driver.drag_and_drop(el1,el2)

driver.quit()

 

四、高级手势(TouchAction)

  1、轻敲

 

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

# 元素
el2 = driver.find_element_by_xpath("//*[text='更多']")
#获取实例对象
TouchAction(driver).tap(el2).perform()

driver.quit()

 

  2、按下和抬起、长按

 

 

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

# 元素
el2 = driver.find_element_by_xpath("//*[text='更多']")
loc = el2.location
#按下
TouchAction(driver).press(loc.get("x"),loc.get('y')).perform()

driver.quit()

 

  3、移动和九宫格解锁

 

from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

# 定位WLAN
WLAN = driver.find_element_by_xpath("//*[text='WLAN']")
#定位应用
app = driver.find_element_by_xpath("//*[text='应用']")
#拖拽
driver.drag_and_drop(app,WLAN)
#定位安全
security = driver.find_element_by_xpath("//*[text='安全']").click()
#点击屏幕解锁方式
way = driver.find_element_by_xpath("//*[text='屏幕解锁方式']").click()
#点击图案
picture = driver.find_element_by_xpath("//*[text='图案']").click()
#等待页面加载
sleep(2)
#绘制解锁图案(记住每个点的坐标)
TouchAction(driver).press(x=1048,y=340).wait(100).move_to(x=1374,y=234).wait(100).move_to(x=1374,y=234).wait(100)\
        .move_to(x=1374,y=211).wait(100).move_to(x=1374,y=234).wait(100).move_to(x=104,y=234).wait(100)

driver.quit()

 

五、手机操作

  1、获取分辨率和截图

    获取手机分辨率:driver.get_window_size()

    截图:driver.get_screenshot_as_file(fileName)

 

  2、获取和设置手机网络

    获取手机网络:driver.network_connection()

    设置手机网络:driver.set_network_connection(connection Type)           #####connection Type:表示网络类型(用数字代表,去代码底层查看)

from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

# 获取手机网络
print(driver.network_connection)
#设置当前网络为飞行模式,(进入底层查看,不同数字代表不同网络类型)
driver.set_network_connection(1)
#获取屏幕分辨率
print(driver.get_window_size())
#截图
driver.get_screenshot_as_file('./screen.png')
driver.quit()

  

  3、手机按键操作

 

from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#点击3音量键+:24
i = 0
while i<3:
    driver.press_keycode(24)
    i += 1
#点击返回
driver.press_keycode(4)
#点击2音量键-:25
i = 0
while i<2:
    driver.press_keycode(25)
    i += 1

driver.quit()

 

  4、手机通知栏

 

from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#打开通知栏
driver.open_notifications()
#查找信息并点击
driver.find_elements_by_xpath("//*[@text='应用宝.apk']").click()

driver.quit()

 

六、其他延伸

  1、获取toast消息(黑底白字的信息)

    环境:

    需要在默认字典加参数设置

    desired_caps["automationName"] = "Uiautomator2"

 

from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True
#设置toast消息
desired_caps["automationName"] = "Uiautomator2"

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

#点击未登录
driver.find_elements_by_xpath("//*[@text='未登录']").click()
#点击登录
driver.find_elements_by_xpath("//*[@text='登录']").click()
#点击微信登录
driver.find_elements_by_xpath("//*[@text='微信登录']").click()
#获取toast消息
msg = driver.find_elements_by_xpath("//*[contains(@text,'请先勾选同意')]").text
print(msg)

driver.quit()

 

  2、切换环境(webView App)测试(进入手机网页像html一样操作,手机页面嵌套了 html)

from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
#定义字典变量
desired_caps ={}

#字典追加启动参数
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.1"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"

#设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True
#设置toast消息
desired_caps["automationName"] = "Uiautomator2"

#获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)
driver.implicitly_wait(10)

#点击进入HTML页面
msg = driver.find_elements_by_xpath("//*[contains(@text,'记住快乐瞬间')]").click()
#获取当前环境
env = driver.context
#切换环境
driver.switch_to.context(env[1])
#此时可以用html操作(此时操作需要放浏览器驱动,放到手机或者模拟器)
driver.find_elements_by_xpath("//*[@id='index-kw']").send_keys("你好")


driver.quit()

 

  3、monkey

     

    monkey 指令

      后面的数字是执行 多少次(随机执行步骤次数)

      -v -v 是很具体的日志了

 

 

    monkey指令了解

   例如命令执行(缩放指令)100:adb shell monkey -p 执行的应用包名 -v -v --pct-pinchzoom 100 1000 > 电脑上日志保存的文件路径。

    

 

 

 

 

   

 

 

 

 

 

 

 

 

    

posted @ 2023-04-21 16:54  新入世界的小白  阅读(36)  评论(0编辑  收藏  举报