【appium】解决 打开第二个webview识别第一个webview元素

时间:2021-01-29 10:48:49

问题:

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

例:

【appium】解决 打开第二个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