切换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能精准的定位到控件,但是有两个明显的缺点:
- 页面层级越复杂xpath越长,不够优雅。
- 对层级的依赖性强,一旦改了页面层级就无法定位到相应的元素。
如果用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
即可定位到鼠标点击区域的控件
在左侧的节点上右键点击,在右键菜单的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
,以此类推即可定位到控件。
当然,大部分情况选取最后一段就可以了,不需要一次次的试。
网友评论