app自動化測試---appium之鼠標滑動,滑動查找元素


1.說明

 

2. 鼠標滑動操作代碼

from appium import webdriver
import time

from appium.webdriver.common.touch_action import TouchAction

desired_caps = {
    'platformName':'Android',          # 測試Android系統
    'platformVersion':'7.1.2',         # Android版本 可以在已連接手機 設置->關於手機 中查看
    'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已連接的設備
    'automationName':'UiAutomator2',   # 自動化引擎(默認UiAutomator2即可)
    'noReset': True,                   # 不要重置app的狀態(比如,已經登陸的app,我們運行項目的時候保留之前的狀態)
    'fullReset': False,                        # 不要清理app的緩存數據(比如,已經登陸的app,我們運行項目的時候保留之前的狀態)
    'appPackage':"org.cnodejs.android.md",     # 應用的包名(打開對應包名的app)
    'appActivity': ".ui.activity.MainActivity" # 應用的活動頁名稱
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capabilities=desired_caps)
time.sleep(5)

viewgroup = driver.find_element_by_android_uiautomator('new UiSelector().className("android.view.ViewGroup").index(2)')

# 獲取元素控件的坐標位置(使用坐標位置去計算滑動坐標,可以保證我們在不同的手機上正常運行)
print('location', viewgroup.location) # {'x': 0, 'y': 120} 元素的左上角坐標
print('rect', viewgroup.rect)         # {'height': 1440, 'width': 900, 'x': 0, 'y': 120}  元素寬高和元素左上角坐標
zb = viewgroup.rect

# 滑動的開始坐標x,y   結束坐標x,y   滑動時間(毫秒)
# 當前設置效果為:從下往上滑動
driver.swipe(start_x=zb['width']/2,start_y=zb['height']+zb['y']-1,end_x=zb['width']/2,end_y=zb['y']+1,duration=200)
# 等同於
# driver.swipe(start_x=450,start_y=1559,end_x=450,end_y=121,duration=200)

# 當前設置效果為:從上往下滑動
driver.swipe(start_x=300, start_y=200, end_x=300, end_y=800, duration=200)
time.sleep(3)

# 點擊頁面中的第一個帖子的作者
first_tiezi = '//*[@resource-id="org.cnodejs.android.md:id/recycler_view"]/android.widget.LinearLayout[1]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout[2]'
driver.find_element_by_xpath(first_tiezi).click()
time.sleep(3)

# 當前設置效果為:從右往左滑動
driver.swipe(start_x=550,start_y=700,end_x=500,end_y=700,duration=200)
time.sleep(3)

# 當前設置效果為:從左往右滑動
driver.swipe(start_x=50,start_y=700,end_x=550,end_y=700,duration=200)
time.sleep(3)

 

3.鼠標滑動查找元素

from appium import webdriver
import time

desired_caps = {
    'platformName':'Android',          # 測試Android系統
    'platformVersion':'7.1.2',         # Android版本 可以在已連接手機 設置->關於手機 中查看
    'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已連接的設備
    'automationName':'UiAutomator2',   # 自動化引擎(默認UiAutomator2即可)
    'noReset': True,                   # 不要重置app的狀態(比如,已經登陸的app,我們運行項目的時候保留之前的狀態)
    'fullReset': False,                        # 不要清理app的緩存數據(比如,已經登陸的app,我們運行項目的時候保留之前的狀態)
    'appPackage':"org.cnodejs.android.md",     # 應用的包名(打開對應包名的app)
    'appActivity': ".ui.activity.MainActivity" # 應用的活動頁名稱
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capabilities=desired_caps)
time.sleep(5)

viewgroup = driver.find_element_by_android_uiautomator('new UiSelector().className("android.view.ViewGroup").index(2)')

# 獲取元素控件的坐標位置(使用坐標位置去計算滑動坐標,可以保證我們在不同的手機上正常運行)
print('location', viewgroup.location) # {'x': 0, 'y': 120} 元素的左上角坐標
print('rect', viewgroup.rect)         # {'height': 1440, 'width': 900, 'x': 0, 'y': 120}  元素寬高和元素左上角坐標
zb = viewgroup.rect

'''
  方案一:
  滑動的開始坐標x,y   結束坐標x,y   滑動時間(毫秒)
  當前設置效果為:從下往上滑動
  滑動查找元素文本內容為:你們學會了沒
  找到元素后,點擊元素
  優點:一邊滑動,一邊查找
  缺點:使用這種方法必須要精准的控制滑動速度,否則滑動過快,可能會錯過目標元素
'''
flag = False
while True:
     driver.swipe(start_x=zb['width']/2,start_y=zb['height']+zb['y']-1,end_x=zb['width']/2,end_y=zb['y']+1,duration=200)
     # 等同於 driver.swipe(start_x=450,start_y=1559,end_x=450,end_y=121,duration=200)
     eles = driver.find_elements_by_id('org.cnodejs.android.md:id/tv_title')  # 獲取多個元素的值
     for ele in eles:
         print(ele.text)
         if ele.text == "你們學會了沒":
             ele.click()
             flag = True
             break
     if flag == True:
         break  # 中斷while 循環


'''
  方案二:
  滑動查找元素文本內容為:你們學會了沒(使用的時候更改查找內容即可)
  找到元素后,點擊元素
  缺點:不能一邊滑動一邊加載(適用於通訊錄之類的,不需要加載的),找不到會報錯的
'''
ele = driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("你們學會了沒").instance(0));')
ele.click()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM