<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # appium基本使用 * 夜神模擬器win7系統下的連接方法:**`adb connect 127.0.0.1:62001`** * 夜神模擬器win10系統下的連接方法:**`adb connect 127.0.0.1:62025`** * deviceName型號 **`adb devices -l`** * 查看當前運行的APP的包名和打開的Activity **`adb shell "dumpsys window | grep mCurrentFocus"`** ~~~ 遇坑排查: 上述 adb shell "dumpsys window | grep mCurrentFocus" 得到的數據不對(也不能說不對,APP首次啟動,啟動的不是首頁) 獲取首次應用的活動名稱可以通過 啟動一次隨機 monkey命令來獲取 adb shell monkey -p com.XXXX.XXX -vvv 1 ·adb devices 有多個設備時,連接其中一個設備 adb -s 設備名 shell adb -s 8BN******413 shell 獲取到的數據正確,app啟動成功 ~~~ ![](https://img.kancloud.cn/e3/3d/e33d48a18717058749b32e2786fa7649_992x163.png) 配置Python連接手機app ~~~ desired = { "platformName": "Android", "platformVersion": "設備版本", "deviceName": "設備名稱", "appPackage": "包名", "appActivity": "activity名稱", "unicodeKeyboard": "True", "restKeyboard": "True" } ~~~ 首先需要現在appium中開啟服務 ![](https://img.kancloud.cn/44/d3/44d39e3f1f8302e2d49a1d31b3a19a0c_650x600.png) 點擊后如下 ![](https://img.kancloud.cn/e5/c8/e5c8aa57f95c5837f44b905145b3e672_650x600.png) 在appium中配置json文件 ~~~ { "platformName": "Android", "platformVersion": "設備版本", "deviceName": "設備名稱", "appPackage": "包名", "appActivity": "activity名稱", "unicodeKeyboard": "True", "restKeyboard": "True" } ~~~ 然后點擊 ![](https://img.kancloud.cn/f7/2c/f72cc6f2f38eae68c0433b1fee1bce77_705x619.png) 填寫json內容 ![](https://img.kancloud.cn/75/70/757052084b4e51f484f24cee99d362d5_1080x570.png) 填寫完成后,點擊保存 ![](https://img.kancloud.cn/55/a8/55a851abfdb2af85db057524636ef689_1080x570.png) 當然你也可以保存該配置至電腦中 ![](https://img.kancloud.cn/cf/97/cf97eb5e9f2a134e44efac0f89c98a22_1350x641.png) ![](https://img.kancloud.cn/25/34/2534612da0db58bc7642f602db7b333d_594x288.png) > ### 定位元素 `start_session`就可以開始定位元素了 ![](https://img.kancloud.cn/cf/62/cf623d03a042d6b61c25f63c90f46c4a_933x582.png) 基本使用 ![](https://img.kancloud.cn/b8/d3/b8d396884e48f018338adfb5b0cd5197_1440x854.png) 判斷屬性是否唯一 ![](https://img.kancloud.cn/23/6b/236b3f4a376518e92adfdc9b68b9c02a_693x273.png) ![](https://img.kancloud.cn/e1/5c/e15cb3571fbbf99808f4306d16fbdb85_581x339.png) ![](https://img.kancloud.cn/d2/22/d22202b08fb4eb3a6e03579ce100ab51_531x405.png) > ### 基本定位 ~~~ from appium import webdriver from time import sleep # 配置需要操作的手機以及app desired = { "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62001", "appPackage": "com.mymoney", "appActivity": "com.mymoney.biz.splash.newguide.NewGuideActivity", "unicodeKeyboard": "True", "restKeyboard": "True" } # 連接appium,打開app d = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired) sleep(5) # 點擊下一步,使用id定位 d.find_element_by_id('com.mymoney:id/next_btn').click() sleep(3) # 再次點擊下一步,使用class定位 d.find_element_by_class_name('android.widget.Button').click() sleep(3) # 點擊開始隨手記 d.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout[2]/android.widget.LinearLayout[2]/android.widget.Button[1]').click() sleep(10) # 關閉app d.close_app() ~~~ > ### UIAutomator定位 使用方法 find\_element\_by\_android\_uiautomator() 可以運用UiAutomator元素定位。 UiAutomator提供一下三種方式來定位: ?id定位`d.find_element_by_android_uiautomator('new UiSelector().resourceId("id的值")')` ?text定位`d.find_element_by_android_uiautomator('new UiSelector().text("text的內容")')` ?class name定位`d.find_element_by_android_uiautomator('new UiSelector().className("className的值")')` > ### 定位一組元素 > ### Swipe 兩點之間的滑動操作 我們在使用App的過程中,經常會在屏幕上進行滑動的操作,如,刷新新聞,刷朋友圈等,會做上下滑動的動作;如果是看圖片,就會左右移動。在Appium里面,我們是用swipe()這個方法來實現這個操作。 ![](https://img.kancloud.cn/cc/74/cc742f18fff9d35909454596761ac104_552x357.png) 語法: `swipe(起始橫坐標,起始縱坐標,目標橫坐標,目標縱坐標)` 獲取屏幕尺寸`d.get_window_size()`獲取屏幕大小,以**詞典**的方式返回 想右滑動,y軸不變,x軸由小到大即可 ~~~ # 獲取屏幕大小,以詞典的方式返回 size = d.get_window_size() width = size['width'] height = size['height'] x1 = 0.2 * width x2 = 0.9 * width y = 0.5*height d.swipe(x1,y,x2,y) ~~~ > ### 連續滑動 swipe滑動操作,一般是兩點之間的滑動,而實際使用過程中用戶可能要進行一些多點連續滑動操作。如手勢密碼操作,切西瓜等場景。那么在Appium中該如何模擬這類操作呢? TouchAction TouchAction包含一些列操作,比如按壓、長按、點擊、移動、暫停。由這些不同操作可以組成一套動作。使用TochAction需要先導入對應的模塊: `from appium.webdriver.common.touch_action import TouchAction` 連續滑動需要導入`from appium.webdriver.common.touch_action import TouchAction` * 按壓 方法:press() 按壓一個元素或坐標點(x,y)。 ~~~ press(element) press(x,y) ~~~ * 長按 方法:相比press()方法,long\_press()多了一個入參,就是長按的時間。duration以毫秒為單位。1000表示按一秒鐘。其用法與press()方法相同。 ~~~ long_press(element,duration=1000) long_press(x,y,duration=1000) ~~~ * 點擊 方法:tap() 對一個元素或控件執行點擊操作。用法參考press()。 ~~~ tap(element) tap(x,y) ~~~ * 移動 方法:move\_to() 將指針從上一個點移動到指定的元素或點。 ~~~ move_to(element) move_to(x,y) ~~~ * 暫停 方法:wait()暫停腳本的執行,單位為毫秒。 ~~~ wait(ms) ~~~ * 釋放 方法release() ,我們滑動總要停止吧?怎么停止?就是用這個方法停止。 ~~~ release() ~~~ * 執行 方法:perform() 把要執行的操作發送到Appium服務器,即讓要執行的操作生效。 ~~~ perform() ~~~ **示例代碼** ~~~ from appium import webdriver from time import sleep from appium.webdriver.common.touch_action import TouchAction # 配置需要操作的手機以及app desired = { "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62001", "appPackage": "com.mymoney", "appActivity": "com.mymoney.biz.splash.newguide.NewGuideActivity", "unicodeKeyboard": True, "restKeyboard": True } # 連接appium,打開app d = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired) sleep(5) # UIAutomator定位之id定位 d.find_element_by_android_uiautomator('new UiSelector().resourceId("com.mymoney:id/next_btn")').click() sleep(2) # 再次點擊下一步,使用class定位 d.find_element_by_android_uiautomator('new UiSelector().className("android.widget.Button")').click() sleep(2) # 通過text定位,進入首頁 d.find_element_by_android_uiautomator('new UiSelector().text("開始隨手記")').click() sleep(10) # 點擊更多 d.find_element_by_id('com.mymoney:id/nav_setting_btn').click() sleep(2) # 往上滑動 # # 獲取屏幕大小,以詞典的方式返回 size = d.get_window_size() width = size['width'] height = size['height'] x = 0.5 * width y1 = 0.2 * height y2 = 0.9 * height d.swipe(x,y2,x,y1) sleep(2) # 點擊高級 d.find_element_by_android_uiautomator('new UiSelector().text("高級")').click() sleep(2) d.find_element_by_android_uiautomator('new UiSelector().text("密碼與手勢密碼")').click() sleep(2) d.find_element_by_android_uiautomator('new UiSelector().text("手勢密碼保護")').click() sleep(2) print('連續滑動') TouchAction(d).press(x=169,y=190).wait(1000).move_to(x=274,y=190).move_to(x=270,y=293).move_to(x=170,y=382).release().perform() sleep(3) d.close_app() ~~~ > ### H5元素的定位 在混合開發的App中,經常會有內嵌的H5頁面。針對這種場景直接使用前面所講的方法來進行定位是行不通的,因為前面的都是基于Andriod原生控件進行元素定位,而Web網頁是單獨的B/S架構,兩者的運行環境不同因此需要進行上下文(context)切換,然后對H5頁面元素進行定位操作。 什么是context呢?在程序中context我們可以理解為當前對象在程序中所處的一個環境。 比如前面提到的App一個界面是屬于Activity類型,也就是Android界面環境,但是當訪問內嵌的網頁是屬于另外一個環境(網頁環境),兩者處于不同的一個環境。 * 獲取所有的上下文`contexts`,以列表的形式返回 ~~~ all_context = d.contexts print(all_context) ~~~ * 切換上下文`switch_to.context()` ~~~ all_context = d.contexts d.switch_to.context(all_context[1]) ~~~ * H5操作的環境搭建 1. 手機與電腦連接,通過adb devices可查看到此設備。 2. 電腦端必須安裝chrome瀏覽器(selenium環境搭建好即可)。 3. App Webview[開啟debug模式](https://www.jianshu.com/p/ebd9736ad274)(注:此步驟,一般需要App開發人員開啟。) 4. 在電腦端Chrome瀏覽器地址欄輸入`chrome://inspect/#devices`,進入調試模式 5. 打開app對應的h5頁面,在`chrome://inspect/#devices`地址中,檢查是否顯示對應的webview,如沒有,則當前未開啟調試模式。 ![](https://img.kancloud.cn/19/44/19443326bb341a0708bbe75c9ab3167c_999x484.png) 上圖App已經開啟了開啟調試模式。 6. 下載與手機系統瀏覽器的版本相對應的驅動 比如我的版本是`74.0.3729.136`,我就需要下載相對應版本的谷歌瀏覽器驅動 下載下來之后創建一個文件夾存放該驅動,并且解壓 比如,我在**D**盤創建了一個`app_chromederiver`目錄,將驅動移動進去并解壓 ![](https://img.kancloud.cn/0b/a8/0ba87570be16988cefe2f0a942391a96_694x355.png) 另外在腳本中的`desired`中增加一項`chromedriverExecutable`指定驅動位置即可 比如我的: ~~~ # 配置需要操作的手機以及app desired = { "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62001", "appPackage": "com.wondershare.drfone", "appActivity": "com.wondershare.drfone.ui.activity.Main2Activity", "unicodeKeyboard": True, "restKeyboard": True } # 由于appium自帶了一個chromedriver,所以我們需要指定appium使用我們下載下來的對應版本的驅動 # 在desired中,增加一個key>>> chromedriverExecutable,它的值就是指定的驅動位置 desired['chromedriverExecutable'] = R"D:\app_chromederiver\chromedriver.exe" ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看