手机浏览器自动化及桌面浏览器模拟手机自动化

如果有应用在手机 app 上面,我们直接自动化手机里面浏览器。要怎么做?就是说在手机里面的浏览器打开一个 web 页面进行测试。它是有个方法的,我们看下面的代码。

# 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()

我们接下来讲的是如何在手机里面打开一个浏览器,去自动化手机里面的浏览器,这里面的浏览器我们选择谷歌,已谷歌为例。如果你的手机里面没有谷歌浏览器你就安装一个不然就会提示找不到应用。下面就是声明浏览器名称就是 Chrome

desired_caps['browserName'] = 'Chrome'

大家看配置项并没有写包名,大家注意如果你这里面写的是 Chrome,它会自动去生成一个包名和一个 Activity 。下面的代码就和 Selenium 一样了。大家会不会疑惑,这个浏览器不是原生应用吗,为什么我们这里不需要切换 Webview

启动浏览器之后这个 appium 自动已 selenium 模式来对浏览器做驱动。大家把手机想象成一台计算机,就像你在计算机里面去做操作,计算机打开浏览器之后它把 driver.get 打开一个网页,打开网页之后就开始去找元素然后操作元素,就是这样一个过程。


运行代码,发现报错了,报错信息如下:

手机浏览器自动化及桌面浏览器模拟手机自动化_第1张图片
image.png

设备上的 Chrome 版本是:Chrome/74.0.3729.136chromedriver 的版本是2.45.615291,版本不匹配。我们把 ChromeDriver 换一下就可以了,怎么换 ChromeDriver 我们在这里在讲一遍。看图

手机浏览器自动化及桌面浏览器模拟手机自动化_第2张图片
image.png
手机浏览器自动化及桌面浏览器模拟手机自动化_第3张图片
image.png

如果我们不在手机上做自动化,在电脑上做自动化行不行?前面的章节中有讲到,电脑中的浏览器通过手机模式去打开网页,我们前面 selenium 的时候,没有提到怎么用手机模式去打开网页。大家想一下怎么通过手机模式打开桌面上的浏览器?模拟手机自动化。我们看这部分代码

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()

# 选择一种存在的模拟手机设备类型
chrome_options.add_experimental_option(
    "mobileEmulation",
    {"deviceName": "Pixel 2"}) #代表设备的名称是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 。第二行大家可能觉得有点陌生,这里是什么意思呢,我们可以点进去先看一下。这里的 Options 相当于一个配置类,在这个配置里面它属于 chromeOptions

手机浏览器自动化及桌面浏览器模拟手机自动化_第4张图片
image.png

它是属于谷歌的配置类,因为可能每一个浏览器它的配置项还不一样。这个配置类更贴合浏览器本身。

这里要注意一下:

driver = webdriver.Chrome(
    desired_capabilities = chrome_options.to_capabilities()
)

这里我们没有写 chromedriver 路径,可以写也可以不写,如果不写的话需要把 chromedriver 放到环境变量里面。


添加自定义机型,点击

手机浏览器自动化及桌面浏览器模拟手机自动化_第5张图片
image.png

我运行上述代码的术后还遇到了一个小坑,如果运行代码报错 'chromedriver' executable needs to be in PATH问题,用如下方法解决:

1.chromedriver.exe 拷贝至谷歌浏览器目录(如 C:\Program Files\Google\Chrome\Application) 以及 python 根目录 **。

  • python 根目录查看方法如下图
手机浏览器自动化及桌面浏览器模拟手机自动化_第6张图片
image.png

2. 将谷歌浏览器环境变量添加到
path (C:\Users\HD003\AppData\Local\Google\Chrome\Application)
至此,就可以解决 chromedriver executable needs to be in PATH 问题了。

你可能感兴趣的:(手机浏览器自动化及桌面浏览器模拟手机自动化)