问题:
hybrid app进行appium自动化时,都会进行contexts切换到webview来进行事件点击。但如果打开了第二个webview的情况下并且webview是新开页面,可能会识别成之前的webview内容。导致无法进行事件点击。
例:

解决方法:
切换到新的webview页面时候,先进行切换回native的context,此时杀掉chromedriver进行,再次切换webview context让chromedriver重新获取新的webview。
注意:不要在webview context情况下杀掉chromedriver,会导致页面关闭。
更新:appium1.5版本以上可以设置
recreateChromeDriverSessions=true 不需要手动kill。
杀掉chromedriver:
pkill -9 chromedriver
附带切换context代码
def switch_context(self, context="WEBVIEW_xxxx"):
context = context.upper()
contexts = self.driver.contexts
for con in contexts:
if context in con and context.find('WEBVIEW') != -1:
print 'switch webview'
self.driver.switch_context(con)
res = self.driver.current_context
return True if context in res else False
elif context in con and context.find('NATIVE') != -1:
print 'switch native'
self.driver.switch_context(con)
os.system('pkill -9 chromedriver')
res = self.driver.current_context
print res
return True if context in res else False
return SwitchContextError
def switch_content_default(self):
time.sleep(3)
self.driver.switch_context('NATIVE_APP')
os.system('pkill -9 chromedriver')
for con in self.driver.contexts:
if con.find('WEBVIEW') != -1:
self.driver.switch_context(con)
return True
return SwitchContextError