前期准备
1、电脑appium环境已经搭建好
2、电脑下载chrome浏览器,并可以访问谷歌
3、查看手机或模拟器自带浏览器version,adb shell pm dump com.android.webview | grep version
4、下载对应版本webview的driver驱动,具体查看官网说明https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
脚本编写
1、配置编写
def setup(self):
des_caps = {}
des_caps['platformName'] = 'Android'
des_caps['platformVersion'] = '6.0'
des_caps['deviceName'] = 'emulator-7555'
des_caps['noReset'] = True
des_caps['appPackage'] = 'com.xxxxx.android'
des_caps['appActivity'] = '.xxxx.MainActivity'
des_caps['chromedriverChromeMappingFile'] = r'E:\xuexi\aiphone\test_phone\mapping.json'
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', des_caps)
2、页面动作
def test_create_account(self):
self.driver.find_element(By.XPATH, '//*[@text="交易"]').click()
print(self.driver.contexts)
# 切换上下文,原生-webview
self.driver.switch_to.context((self.driver.contexts)[-1])
old_handles = self.driver.window_handles
self.driver.find_element(MobileBy.XPATH, '//*[@id="Layout_app_3V4"]/div/div/ul/li[1]/div[2]').click()
new_handles = self.driver.window_handles
# 获取句柄
for curr_handles in new_handles:
if curr_handles in old_handles:
pass
else:
handles = curr_handles
self.driver.switch_to.window(handles)
input_locator = (MobileBy.ID, 'phone-number')
# 显示等待
WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable(input_locator))
self.driver.find_element(MobileBy.ID, 'phone-number').send_keys('134444444444')
注意事项
1、从原始应用切换到webview后,要对webview操作应先切换contexts
2、webview之间切换时同selenium一样有句柄的概念也要注意切换
3、切换到新的句柄后要添加显示等待否则会报错