美文网首页
appium之混合应用获取web元素(923)

appium之混合应用获取web元素(923)

作者: Qin0821 | 来源:发表于2018-08-08 18:11 被阅读0次

    切换context

    官方文档
    这会将您的Appium会话置于一种模式,其中所有命令都被解释为用于自动化Web视图,而不是应用程序的本机部分。例如,如果运行getElementByTagName,它将在Web视图的DOM上运行,而不是返回本机元素。当然,某些WebDriver方法仅在一个或另一个上下文中有意义,因此在错误的上下文中您将收到错误消息。
    在实例化chromeDriver之后,可以这样切换driver.switch_to("xxx")

    获取web元素

    chromeDriver提供了许多寻找web元素的方法,推荐使用id、className、css selector来获取控件。
    之前我是这样获取控件的:

    self.driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[2]/div[2]/div[1]/div/div[1]/div[1]/div[2]/a/div").click()
    

    通过xpath能精准的定位到控件,但是有两个明显的缺点:

    1. 页面层级越复杂xpath越长,不够优雅。
    2. 对层级的依赖性强,一旦改了页面层级就无法定位到相应的元素。

    如果用css selector来获取控件的话是这样的:

    self.driver.find_element_by_css_selector("div.row.item-inner.chang-user-info").click()
    

    这两句是用来定位同一个元素的,可见用selector更短而且更加见名知意,而且比较稳定。

    如何获取web元素的selector

    使用chrome的inspect,通过快捷键ctrl + shift + c即可定位到鼠标点击区域的控件

    定位web控件

    在左侧的节点上右键点击,在右键菜单的copy子菜单即可获取控件的selector,如:

    body > div.views > div.view.view-main.navbar-through > div.pages > div.page.toolbar-through.page-home-buy.no-swipeback.no-animation.page-on-center > div.page-content.pull-to-refresh-content.infinite-scroll > div.home-vue-box > div.home-ads-wrapper.row > a:nth-child(2) > img
    

    不用全部复制到脚本里去,截取最后一段即可

    div.home-ads-wrapper.row > a:nth-child(2) > img
    

    我没写过前端,对selector不是很了解,根据现在的经验是截取最后一个>之后的即可,如img,但有的时候找不到控件,或者存在重复的情况,这是再往上一个层级,如a:nth-child(2) > img,以此类推即可定位到控件。

    当然,大部分情况选取最后一段就可以了,不需要一次次的试。

    相关文章

      网友评论

          本文标题:appium之混合应用获取web元素(923)

          本文链接:https://www.haomeiwen.com/subject/opqhvftx.html