Appium自動化WebView中元素的操作


在App開發過程中,很容易用到第三方的WebView控件,這個屬於移動端混合型App。在我們做自動化測試的過程中,就要對這種情況進行處理,最通用的辦法就是先將appium切換到webview模式然后按查找web元素的方法對WebView里面的元素進行操作即可。具體實施方法,可以參考:http://www.tuicool.com/articles/bIBRZze

可是也有很多情況,如新浪微博第三方授權登錄頁面(如圖一),這個嵌入到App中的第三方WebView,在查上下文信息的時候,找不到對應的WebView。

Appium自動化WebView中元素的操作

 

圖一:網易新聞客戶端新浪微博授權

查找當前可用的上下文信息的時候,用如下代碼:

contexts=self.driver.contexts

        for cotext in contexts:

            print cotext

根據輸出的信息,如果有WebView信息的時候,可以切換:

driver.switch_to.context("WEBVIEW")

或是 driver.context(“WEBVIEW”)

   但是一直找不到WebView信息,如圖二所示,此時就沒有辦法進行切換。

Appium自動化WebView中元素的操作

圖二,獲取上下文信息的顯示結果

於是嘗試了各種辦法,都沒有實現。最后只好用以下最笨的辦法了,模擬點擊屏幕:

def test_login(self):

       #單擊網易新聞客戶端的登錄按鈕

        time.sleep(10)      

        lgin=self.driver.find_element_by_id("com.netease.newsreader.activity:id/login_icon")

        lgin.click()

        time.sleep(2)       lgbt=self.driver.find_element_by_id("com.netease.newsreader.activity:id/biz_pc_main_info_profile_avatar")

        lgbt.click()                       

        time.sleep(2)

        #單擊新浪微博的登錄按鈕

sinalg=self.driver.find_element_by_id("com.netease.newsreader.activity:id/sinaweibo_name")

        sinalg.click()

        #***以下為模擬單擊屏幕操作

        time.sleep(3)

        #單擊輸入用戶名:sxf

        self.driver.tap([(150,588),])

        time.sleep(3)       

        self.driver.tap([(230,1516),])

        self.driver.tap([(330,1681),])

        self.driver.tap([(440,1516),])

        #輸入密碼:123

        self.driver.tap([(212,776),])

        time.sleep(3)

        self.driver.tap([(72,1236),])

        self.driver.tap([(180,1236),])

        self.driver.tap([(263,1236),])

        time.sleep(3)

        #單擊登錄按鈕

        self.driver.tap([(520,912),])

        time.sleep(10)

上面的模擬單擊操作,可以單擊輸入框調出鍵盤,然后再去單擊鍵盤上面的按鈕,達到輸入信息的目的。定位屏幕上面的座標,可以通過網頁:http://bbs.anjian.com/thread-519563-1-1.html 上面的方法。

     通過模擬點擊鍵盤操作,可以實現對無法查找到的WebView上面的元素進行操作,可是無法獲取上面元素的內容,無法驗證操作后的結果。這是一個很大的問題,目前在網上查找了一下,也沒有找到好的辦法,可能隨着appium的發展會有解決辦法的。也許有好的辦法,我沒有找到,后續我會努力找到好的解決辦法,到時候再和大家共享。

 

原文:http://blog.sina.com.cn/s/blog_68f262210102v92p.html


免責聲明!

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



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