首頁 > 軟體

Appium中scroll和drag_and_drop根據元素位置滑動

2022-02-15 19:01:10

背景

我們在操作APP應用時,有些需要從一個元素滑動到另外一個元素時,這時候我們無法確定座標,所以swipe 根據座標滑動方式就無法使用了,如下圖:從 課堂直播 上滑到 直播公開課 位置


這時候我們就需要使用其他滑動方式,我們想到可以根據元素進行滑動,Appium 裡面根據元素來進行滑動的方式主要方法為 scrolldrag_and_drop

scroll 介紹

說明

從一個元素捲動到另一個元素,只能是兩個元素之間的滑動。

方法詳情

def scroll(self: T, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None) -> T:
        """Scrolls from one element to another

        Args:
            origin_el: the element from which to being scrolling
            destination_el: the element to scroll to
            duration: a duration after pressing originalEl and move the element to destinationEl.
                Default is 600 ms for W3C spec. Zero for MJSONWP.

        Usage:
            driver.scroll(el1, el2)

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """

        # XCUITest x W3C spec has no duration by default in server side
        if self.w3c and duration is None:
            duration = 600

        action = TouchAction(self)
        if duration is None:
            action.press(origin_el).move_to(destination_el).release().perform()
        else:
            action.press(origin_el).wait(duration).move_to(destination_el).release().perform()
        return self

引數:

  • origin_el - 要捲動的起始元素
  • destination_el - 要捲動到的結束元素
  • duration - 持續時間,單位毫秒,預設為 600 ms

操作場景

  • 進入網易雲首頁
  • 從課堂直播滑動到直播公開課位置

關鍵程式碼實現

# 定位到課堂直播元素
el1 = driver.find_element(AppiumBy.XPATH, "//*[@text='課堂直播']").click()

# 定位到直播公開課元素
el2 = driver.find_element(AppiumBy.XPATH, "//*[@text='直播公開課']").click()

# 執⾏滑動操作
driver.scroll(el1,el2)

說明

操作過程有 慣性,需要新增duration引數,引數值越大,慣性越小。

drag_and_drop 介紹

說明

從一個元素滑動到另一個元素,第二個元素代替第一個元素原本螢幕上的位置。

方法詳情

def drag_and_drop(self: T, origin_el: WebElement, destination_el: WebElement) -> T:
        """Drag the origin element to the destination element

        Args:
            origin_el: the element to drag
            destination_el: the element to drag to

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """
        action = TouchAction(self)
        action.long_press(origin_el).move_to(destination_el).release().perform()
        return self

引數:

  • origin_el - 要滑動頁面的起始元素
  • destination_el - 要滑動頁面到結束元素

操作場景

  • 進入網易雲首頁
  • 從課堂直播滑動到直播公開課位置

關鍵程式碼實現

# 定位到課堂直播元素
el1 = driver.find_element(AppiumBy.XPATH, "//*[@text='課堂直播']").click()

# 定位到直播公開課元素
el2 = driver.find_element(AppiumBy.XPATH, "//*[@text='直播公開課']").click()

# 執⾏滑動操作
driver.drag_and_drop(el1,el2)

說明

不能設定持續時間,沒有慣性

滑動和拖拽使用場景選擇

滑動和拖拽無非就是考慮是否具有“慣性”,以及傳遞的引數是“元素”還是“座標”。

  • scroll:有 “慣性” ,傳入 “元素”,可以通過設定duration引數來進行控制慣性大小
  • drag_and_drop:無 “慣性” ,傳入 “元素”
  • swipe:有 “慣性” ,傳入 “座標”,可以通過設定duration引數來進行控制慣性大小

說明: 新增duration引數,引數值越大,慣性越小

到此這篇關於Appium中scroll和drag_and_drop根據元素位置滑動的文章就介紹到這了,更多相關Appium 元素滑動內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com