如果有應(yīng)用在手機(jī) app 上面,我們直接自動化手機(jī)里面瀏覽器。要怎么做?就是說在手機(jī)里面的瀏覽器打開一個 web 頁面進(jìn)行測試。它是有個方法的,我們看下面的代碼。
# coding=utf8
from appium import webdriver
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import traceback
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '7'
desired_caps['deviceName'] = 'test'
desired_caps['browserName'] = 'Chrome'
desired_caps['newCommandTimeout'] = 6000
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #啟動Remote RPC
driver.implicitly_wait(10)
try:
driver.get('http://www.baidu.com')
driver.find_element_by_id('index-kw').send_keys('宋曲')
driver.find_element_by_id('index-bn').click()
except:
print(traceback.format_exc())
input('**** Press to quit..')
driver.quit()
我們接下來講的是如何在手機(jī)里面打開一個瀏覽器,去自動化手機(jī)里面的瀏覽器,這里面的瀏覽器我們選擇谷歌,已谷歌為例。如果你的手機(jī)里面沒有谷歌瀏覽器你就安裝一個不然就會提示找不到應(yīng)用。下面就是聲明瀏覽器名稱就是 Chrome
desired_caps['browserName'] = 'Chrome'
大家看配置項并沒有寫包名,大家注意如果你這里面寫的是 Chrome,它會自動去生成一個包名和一個 Activity 。下面的代碼就和 Selenium 一樣了。大家會不會疑惑,這個瀏覽器不是原生應(yīng)用嗎,為什么我們這里不需要切換 Webview ?
啟動瀏覽器之后這個 appium 自動已 selenium 模式來對瀏覽器做驅(qū)動。大家把手機(jī)想象成一臺計算機(jī),就像你在計算機(jī)里面去做操作,計算機(jī)打開瀏覽器之后它把 driver.get 打開一個網(wǎng)頁,打開網(wǎng)頁之后就開始去找元素然后操作元素,就是這樣一個過程。
運(yùn)行代碼,發(fā)現(xiàn)報錯了,報錯信息如下:

設(shè)備上的 Chrome 版本是:Chrome/74.0.3729.136,chromedriver 的版本是2.45.615291,版本不匹配。我們把 ChromeDriver 換一下就可以了,怎么換 ChromeDriver 我們在這里在講一遍??磮D


如果我們不在手機(jī)上做自動化,在電腦上做自動化行不行?前面的章節(jié)中有講到,電腦中的瀏覽器通過手機(jī)模式去打開網(wǎng)頁,我們前面 selenium 的時候,沒有提到怎么用手機(jī)模式去打開網(wǎng)頁。大家想一下怎么通過手機(jī)模式打開桌面上的瀏覽器?模擬手機(jī)自動化。我們看這部分代碼
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
# 選擇一種存在的模擬手機(jī)設(shè)備類型
chrome_options.add_experimental_option(
"mobileEmulation",
{"deviceName": "Pixel 2"}) #代表設(shè)備的名稱是Pixel 2
driver = webdriver.Chrome(
desired_capabilities = chrome_options.to_capabilities()
)
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
element_keyword = driver.find_element_by_id("index-kw")
# 輸入字符
element_keyword.click()
element_keyword.send_keys('宋曲\n')
input('press to continue...')
driver.quit()
大家先看第一行,看到這里是不是很熟悉 from selenium import webdriver 。第二行大家可能覺得有點(diǎn)陌生,這里是什么意思呢,我們可以點(diǎn)進(jìn)去先看一下。這里的 Options 相當(dāng)于一個配置類,在這個配置里面它屬于 chromeOptions

它是屬于谷歌的配置類,因?yàn)榭赡苊恳粋€瀏覽器它的配置項還不一樣。這個配置類更貼合瀏覽器本身。
這里要注意一下:
driver = webdriver.Chrome(
desired_capabilities = chrome_options.to_capabilities()
)
這里我們沒有寫 chromedriver 路徑,可以寫也可以不寫,如果不寫的話需要把 chromedriver 放到環(huán)境變量里面。
添加自定義機(jī)型,點(diǎn)擊

我運(yùn)行上述代碼的術(shù)后還遇到了一個小坑,如果運(yùn)行代碼報錯 'chromedriver' executable needs to be in PATH問題,用如下方法解決:
1. 將 chromedriver.exe 拷貝至谷歌瀏覽器目錄(如 C:\Program Files\Google\Chrome\Application) 以及 python 根目錄 **。
- python 根目錄查看方法如下圖

2. 將谷歌瀏覽器環(huán)境變量添加到
path (C:\Users\HD003\AppData\Local\Google\Chrome\Application)。
至此,就可以解決 chromedriver executable needs to be in PATH 問題了。