1. Appium Appium+Python 在切換到 webview 下,click () 事件後界面無響應
腳本如下:
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time
import os
server = r' http://localhost:4723/wd/hub' # Appium Server, 埠默認為4723
desired_capabilities = {
'platformName': 'Android', # 平台
# 需替換成你的driverName,如果不知 道自己的設備名,用adb命令去查看一下
'driverName': 'c611c3b4', #手機名稱
'platformVersion': '10.0.0', # 安卓版本
'appPackage': 'com.webmobile.activity', #APP包名
'appActivity': '.MainActivityP', # APP啟動名
'noReset':True
}
driver = webdriver.Remote(server, desired_capabilities) # 連接手機和APP
c=driver.contexts
print(c[1])
driver.switch_to.context(c[1])
driver.find_element_by_xpath('//*[@id="username"]').click()
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[4]/div[1]/button[2]').click()
執行到這一步,發現沒問題,沒有報錯,但是click沒有定位到,在瀏覽器的conlse
定位OK,說明xpath沒有毛病,怎麼辦?去他媽的,放棄治療,本來想研究一下APP自動化,感覺坑太多,兄弟們,你們加油!
2. appium怎麼查看web元素
如果是進行wap端測試
1、使用appium集成的chromeDriver。在手機端安裝chrome瀏覽器,下載對應版本的chromeDriver,使用appium初始化Chrome瀏覽器相關設置,可以啟動chrome,利用chromedriver實現自動化。
設置chrome瀏覽器名稱,activity,packageName等
2、如果是app內嵌webview,需要初始化driver後,利用driver.context("WEBVIEW_1"),進行切換到webview,進行元素定位或者自動化,這種前提需要app代碼中開啟支持webview的debug模式
3、其他方式,啟動源生瀏覽器,但這種方式是將源生瀏覽器當做一個app來使用,可能啟動activity不允許三方進行調用,這樣會導致失敗
3. APP自動化測試appium環境怎麼搭建
APP自動化測試appium環境怎麼搭建?1
/12
下載安裝node.js (注意操作系統,32位,64位)。安裝完成後,檢查是否安裝成功:cmd, 輸入node -v , 顯示安裝版本信息,則安裝成功,如下圖所示:
2
/12
安裝JDK配置環境變數
JDK安裝,以及環境變數設置
下載eclipse (注意操作系統,32位,64位),Mars版。
3
/12
配置Android SDK環境
下載Android SDK,下載地址www.androiddevtools.cn,如下圖所示:
4
/12
安裝保證Level 17或以上版本 api,如下圖所示:
5
/12
Android操作系統選擇安裝用於模擬機,如下圖所示:
6
/12
配置環境變數
a>新增變數:ANDROID_HOME,設置值為安裝目錄: l例如 E:\android-sdk
b>Path中新增參數:%ANDROID_HOME%\tools; %ANDROID_HOME%\platform-tools
7
/12
驗證是否安裝配置成功
cmd: 輸入 android, 彈出SDK Manager窗口。
8
/12
ADT安裝
打開eclipse,help>install new software, 輸入https://dl-ssl.google.com/android/eclipse
下載時間會比較久,也可以考慮直接下載後本地安裝,如下圖所示:
9
/12
安裝完成,重啟Eclipse,如下圖所示:
10
/12
安裝Appium,下載: http://appium.io,如下圖所示:
11
/12
設置環境變數
Appium目錄和他的bin目錄都加入環境變數PATH:例如
APPIUM_HOME: E:\App\Appium
Path: %APPIUM_HOME%\node_moles\.bin
12
/12
運行appium-doctor來驗證Appium的所有依賴是否配置正確。
4. appium怎麼切換到webview
print driver.contexts
driver.switch_to.context('WEBVIEW')
els = self.driver.find_elements_by_xpath('//android.widget.TextView')
print len(els)
print els[0].text
appium 的log信息:
info: --> POST /wd/hub/session/ee2b3cf6-efa3-4bfe-93d9-05e61cf36001/elements {"u
sing":"xpath","sessionId":"ee2b3cf6-efa3-4bfe-93d9-05e61cf36001","value":"//andr
oid.widget.TextView"}
info: [debug] Proxying command to 127.0.0.1:9515
info: [debug] Making http request with opts: {"url":"http://127.0.0.1:9515/wd/hu
b/session//elements","method":"POST","json":{"us
ing":"xpath","sessionId":"ee2b3cf6-efa3-4bfe-93d9-05e61cf36001","value":"//andro
id.widget.TextView"}}
info: [debug] Didn't get a new command in 60 secs, shutting down...
info: Shutting down appium session
info: [debug] Pressing the HOME button
5. 如何啟用和使用Appium的WebView於iOS自動化
在App開發過程中,很容易用到第三方的WebView控制項,這個屬於移動端混合型App。在我們做自動化測試的過程中,就要對這種情況進行處理,最通用的辦法就是先將appium切換到webview模式然後按查找web元素的方法對WebView裡面的元素進行操作即可。
6. 讀懂appium原理,看這篇就夠了
話不多說,直接上干貨:
appium的整體架構是C/S模式,整體流程(返回順序為逆向):
腳本請求 ——> 4723埠appium server ——> 解析參數給PC端4724埠 ——> 發送給設備4724埠 ——> 通過設備4724埠發給bootstrap.jar ——> Bootstrap.jar把命令發給uiautomator
1、腳本請求 ——> 4723埠appium server :
首先我們要開啟appium服務,即Appium server,也就是在命令行用appium命令打開的東西,默認監聽4723埠。4723埠專門和腳本打交道,基於WebDriver協議。webdriver是按照server – client的經典設計模式設計的,作用就是啟動基於WebDriver Wire協議的appium服務,接下來腳本與appium server的通信實際上是一個HTTP request請求給appium server,在請求的body中,會以WebDriver Wire協議規定的 JSON 格式的字元串來告訴appium服務我們希望設備接下來做什麼事情。讀到這里,難免有同學會有疑問了,因為有一些文檔上面說腳本發送請求是基於Json wire protocol協議的,首先這是完全正確的,接下來就解釋一下:
appium中的Json wire protocol繼承自selenium的webdriver wire protocol,並進行了擴展,使得Json wire protocol能夠控制不同的移動設備的行為。如果大家覺得對於webdriver這個名詞覺得比較陌生的話,接下來說一個詞肯定熟悉 - Selenium。Selenium是一個瀏覽器自動化操作框架。Selenium主要由三種工具組成。第一個工具SeleniumIDE,是Firefox的擴展插件,支持用戶錄制和回訪測試,錄制/回訪模式存在局限性,對許多用戶來說並不適合,因此第二個工具——Selenium WebDriver提供了各種語言環境的API來支持更多控制權和編寫符合標准軟體開發實踐的應用程序。最後一個工具——SeleniumGrid幫助工程師使用Selenium API控制分布在一系列機器上的瀏覽器實例,支持並發運行更多測試。在項目內部,它們分別被稱為「IDE」、「WebDriver」和「Grid」。
那麼webdriver wire protocol又是什麼呢:
在我們創建一個WebDriver的過程中,Selenium首先會確認瀏覽器的native component是否存在可用而且版本匹配。接著就在目標瀏覽器里啟動一整套Web Service,這套Web Service使用了Selenium自己設計定義的協議,名字叫做 The WebDriver Wire Protocol, 只不過對應到我們這里的瀏覽器指的是Appium。
WebDriver Wire協議是通用的,也就是說不管是FirefoxDriver還是ChromeDriver,啟動之後都會在某一個埠啟動基於這套協議的Web Service。對應到Appium,可以理解為是AppiumDriver。接下來,我們調用WebDriver的任何API,都需要藉助一個 ComandExecutor 發送一個命令,實際上是一個HTTP request給埠上的Web Service。在我們的HTTP request的body中,會以WebDriver Wire協議規定的 JSON 格式的字元串來告訴Selenium我們希望瀏覽器(設備)接下來做什麼事情。
說到這里可能會有疑問了,上面說到的是腳本請求對設備進行操作,但前提是,我們要對誰進行操作測試呢?這里就引入一個新名詞:desiredCapabilities。了解了上述之後,再去看腳本怎麼將desiredCapabilities傳遞給appium server就明白多了,腳本通過Json Wire Protocol協議以json格式發送測試設備信息給server端,測試設備信息被攜帶在Desired Capabilities中,這個東西實質上是一個key-value形式的對象,Desired Capabilities最重要的作用是告訴server本次測試的上下文。這次是要進行瀏覽器測試還是移動端測試?如果是移動端測試的話是android還是ios?如果android的話我們要測試哪個app?server的這些疑問Desired Capabilities都必須給予解答,否則server不買賬,針對我們現在所說的安卓,它帶來的影響就是無法完成app的啟動。
那麼,將測試設備信息告知之後,是不是就可以開始進行測試了呢?答案是:NO。這里又要引入一個名詞:session。session就是一個會話,在webdriver/appium,你的所有工作永遠都是在session start後才可以進行的。client 創建1個session,在該session中通過http向appium server發送請求,appium server解析請求,完成相應操作並返回response。
Session在計算機中,尤其是在網路應用中,稱為「會話控制」。Session 對象存儲特定用戶會話所需的屬性及配置信息,對應到這里其實就是desiredCapabilities中的配置信息參數。腳本通過POST /session這個URL,然後傳入Desired Capabilities就可以開啟session了,由於這是第一次請求創建session,所有並沒有一個已創建的session id,所以appium server會調用android driver(appium升級到2.0.0後,原有的AppiumDriver函數變成抽象函數了,需更改為AndroidDriver)為client生成一個session並且生成一個與此session相關聯的session id,這個 session id將被在本次響應中返回給客戶端保存,當下次腳本發出操作請求時就會自帶session id為唯一標識,代表所打開的設備,Appium server會按照此session id把這個session檢索出來使用,腳本向appium server發送的請求即是存在於創建的session中的。
Session 的作用就是它在appium服務上保持設備的狀態信息,供在任何時間進行訪問,在多次的操作行為中,存儲在 Session對象中的配置信息將不會丟失,而是在整個用戶會話中一直存在下去,整個測試進程中設備與程序的聯系不會斷開,也不需要每次都發送帶配置信息的請求,程序都知道對哪個設備進行測試操作。當測試結束後,需關閉webdriver,driver.quit()會關閉所有關聯窗口和session,並且也會把進程也關閉。
2、解析參數給PC端4724埠 ——> 發送給設備4724埠 ——> 通過設備4724埠發給bootstrap.jar ——> Bootstrap.jar把命令發給uiautomator:
創建session成功之前,就已將bootstrap.jar放入手機中,並開啟設備上的基於appium bootstrap的socket服務,綁定本機和boostrap通信的埠號4724用於和Android設備通訊,默認監聽4724埠,等待client的連接。
Appium server將腳本的請求解析後給到4724埠,通過設備的4724埠轉發解析後的請求, 此時,對於socket服務來說,appium server就充當了client的角色,appium server通過4724埠主動去請求設備上的socket服務,即向socket服務發送請求,即bootstrap.jar,Bootstrap.jar再把Appium的命令轉換成uiautomator的命令來讓uiautomator進行處理。有請求就有返回,socket接收到請求後會做出響應,原路返回給腳本,然後腳本再進行下一次的請求。
網路上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。appium和手機的通信過程,主要是數據交換的一個過程,socket的作用是就是為了實現雙向通信,它需要一對埠號,對應到這里就是4724,手機端的bootstrap就是socket-server端,appium server就是socket-client端。
關於socket的通信原理,先從伺服器端說起。伺服器端先初始化Socket,然後與埠綁定(bind),對埠進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然後連接伺服器(connect),如果連接成功,這時客戶端與伺服器端的連接就建立了。客戶端發送數據請求,伺服器端接收請求並處理請求,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,一次交互結束。
7. 請問各位大俠,Web測試和App測試有什麼區別
Web測試和App測試區別為:監測不同、更新不同、回歸測試不同。
一、監測不同
1、Web測試:Web測試需監測響應時間、CPU、Memory。
2、App測試:App測試除了需監測響應時間、CPU、Memory外,還需監測 流量、電量等。
二、更新不同
1、Web測試:Web測試只要更新了伺服器端,客戶端就會同步會更新。
2、App測試:App測試更新需要手動更新客戶端。
三、回歸測試不同
1、Web測試:Web測試不需要進行回歸測試。
2、App測試:App測試所有核心版本都需要進行回歸測試。
8. app測試和web測試的區別, web測試和app測試的區別
一、測試方式不同
1、app測試:指對移動應用進行測試,包括自動化測試和人工測試等。
2、web測試:是軟體測試的一部分,是針對Web應用的一類測試。
二、測試內容不同
1、app測試:模擬用戶操作對應用程序進行黑盒測試,並使用Cucumber作為自然語言來編寫測試用例。還會對應用測試操作進行記錄,以幫助開發者進行測試回顧。
2、web測試:包括內容測試、界面測試、功能測試、性能測試、兼容性測試、安全性測試等。
三、特點不同
1、app測試:可通過增加預先測試環節來確認環境已經測試就緒,同時還能知道哪些錯誤是環境不穩定引起的,哪些是一般的測試用例錯誤。
2、web測試:通過測試可以盡可能地多發現瀏覽器端和伺服器端程序中的錯誤並及時加以修正,以保證應用的質量。
9. appium怎麼查看web元素
查找當前可用的上下文信息的時候,用如下代碼:
contexts=self.driver.contexts
for
cotext
in
contexts:
print
cotext
根據輸出的信息,如果有WebView信息的時候,可以切換:
driver.switch_to.context("WEBVIEW")
或是
driver.context(「WEBVIEW」)
但是一直找不到WebView信息,如圖二所示,此時就沒有辦法進行切換。
10. 如何啟用和使用Appium的WebView於iOS自動化
App發程容易用第三WebView控制項屬於移端混合型App我做自化測試程要種情況進行處理通用辦先appium切換webview模式按查找web元素WebView面元素進行操作即