Appium Appium 的上下文 Context

33 · 2019年02月12日 · 1358 次阅读

简单理解上下文

每一段程序都有很多外部变量。只有像 Add 这种简单的函数才是没有外部变量的。一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行。你为了使他们运行,就要给所有的外部变量一个一个写一些值进去。这些值的集合就叫上下文。
你查不到是因为上下文这个东西不是一个具体的东西,上下文在不同的地方表示不同的含义,要感性理解。
context 其实说白了,和文章的上下文是一个意思,在通俗一点,我觉得叫环境更好。
....
林冲大叫一声 “啊也!”
....

问:这句话林冲的 “啊也” 表达了林冲怎样的心里?
答:啊你妈个头啊!

看,一篇文章,给你摘录一段,没前没后,你读不懂,因为有语境,就是语言环境存在,一段话说了什么,要通过上下文 (文章的上下文) 来推断。

子程序之于程序,进程之于操作系统,甚至 app 的一屏之于 app,都是一个道理。

程序执行了部分到达子程序,子程序要获得结果,要用到程序之前的一些结果 (包括但不限于外部变量值,外部对象等等);

app 点击一个按钮进入一个新的界面,也要保存你是在哪个屏幕跳过来的等等信息,以便你点击返回的时候能正确跳回,如果不存肯定就无法正确跳回了。
看这些都是上下文的典型例子,理解成环境就可以,(而且上下文虽然叫上下文,但是程序里面一般都只有上文而已,只是叫的好听叫上下文。。进程中断在操作系统中是有上有下的,不过不给题主说了,免得产生新的问题)

Java 中的 Context

Context(上下文)在 Java 编程中是一个非常重要的概念,而且出现频率很高;但是又是一个比较难理解的东西,或许 “上下文” 这种翻译也不太恰当,我觉得如果找不到一个合适的中文意思,倒不如不翻译。

下面列举几个涉及 Context 的例子。

第一、ServletContext 是 Servlet 中最大的一个接口,呈现了 web 应用的 Servlet 视图。它代表当前的 web 应用,所有的 Servlet 共享同一个 ServletContext 对象,因此 Servlet 对象之间可以通过 ServletContext 对象来实现通讯。ServletContext 对象通常也被称之为 context 域对象。这里的 Context 可以理解成是一种容器,而且容器里的东西是共享的。

第二、pageContext 是 JSP 中的内置对象之一,它是 javax.servlet.jsp.PageContext 类的实例对象。提供了对 JSP 页面所有的对象及命名空间的访问,这里 Context 看作是一个实现访问 JSP 页面之间的数据共享的容器。

第三、在著名框架 Spring 中,Context(上下文)的概念更是得到了广泛的应用。BeanFactory 接口的子接口 ApplicationContext 就表示一个功能更加丰富的工厂,它既涵盖了 BeanFactory 具备的所有功能,也增加了国际化、资源访问(如 URL 和文件)、事件传播等方面的支持。

第四、Context 在 android 中的应用,可以说 Context 的概念贯穿了整个 android 体系;在 Service、BroadcastReceiver、Activity 等都会用到 Context 的相关方法。位于 framework package 的 android.content.Context 中。它是一个抽象类,而且提供了该抽象类的具体实现类 ContextIml 类。只有通过 Context 才能识别调用者的实例,比如说 Toast 的第一个参数就是 Context,一般在 Activity 中我们直接用 this 代替,代表调用者的 实例为 Activity,Context 提供了关于应用环境全局信息的接口。这里的 Context 可以理解为调用所在的环境。

总之,Context 可以理解为提供信息或功能的容器或者环境。个人观点,感觉说得有点浅显、片面。希望大家补充指正。

Appium 中的上下文

Appium 中的上下文的操作主要针对于混合应用。啥是混合应用,简单来说就是 APP 用里面嵌入网页。Android 上的浏览器、内嵌 H5 和 Webview 的微信 APP 就属于混合应用。

1、获取当前上下文

方法:

getContext()

获取当前所有的可用的上下文。该方法不需要入参。

String ct = driver.getContext();
System.out.println(ct);

-----------计算器应用的打印结果-----------------------
NATIVE_APP

2、当前所有上下文句柄

方法:

getContextHandles()

获取当前所有可用的上下文。该方法不需要入参。

3、切换上下文

context()

切换到特定的上下文中。需要指定上下文的名称。

driver.context('NATIVE_APP')
driver.context('WEBVIEW_1')
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册