这个小节我们主要会来介绍下Appium有别于一些自动化工具的特性,即它支持跨应用的操作,那什么事跨应用呢,比如你是一个新闻类的应用,在新闻详情页里面一般都会有分享的按钮,可以选择分享到一些社交应用上如微信朋友圈等,点击分享后界面就会跳到社交类应用上如微信上,这种调转到其他应用的操作我们成为跨应用的操作,英文里成为CROSS APP。
现在我们来实现如下的的跨应用的用例:
上面步骤5出现的页面通过uiautomatorviewer观察到所属的包名为com.android.chrome不是开源中国的包名net.oschina.app,因此属于跨应用的操作
可以在测试工程里新建一个包如testcases.crossapp,接着新建一个类CrossApp来实现上面的用例。
在具体实现之前先打开之前抽取的资讯详情的Page类,添加点击分享按钮的操作。QQ登录页面的输入操因为只是一个演示的操作这里不再单调新建一个Page类来封装了,直接也放在资讯详情的Page类里,更新完的Page类如下所示:
package appium.pages;
import appium.common.Helper;
import org.openqa.selenium.WebElement;
public class PageNewsDetail {
private Helper helper;
public PageNewsDetail(Helper helper){
this.helper = helper;
}
//封装收藏按钮
public WebElement getAddToFavoritesBtn(){
return helper.findById("net.oschina.app:id/iv_fav");
}
//封装底部的分享按钮
public WebElement getShareIcon(){
return helper.findById("net.oschina.app:id/iv_share");
}
//封装QQ分享项控件
public WebElement getQQShareOption(){
return helper.findByText("QQ");
}
//封装QQ登录页面的用户名输入框
public WebElement getUserNameInQQLoginPage(){
return helper.findById("u");
}
//封装点击底部分享按钮
public void clickShareIcon(){
helper.click(getShareIcon());
}
//点击收藏按钮的方法
public void clickAddToFavorites(){
helper.click(getAddToFavoritesBtn());
}
//封装点击分享到QQ的操作
public void clickShareToQQOption(){
helper.click(getQQShareOption());
}
//封装输入QQ用户名输入框的方法
public void enterNameInQQLoginPage(String name ){
helper.enterText(getUserNameInQQLoginPage(),name);
}
}
这时候就可以具体来实现用例了,实现完如下所示:
package appium.testcases.crossapp;
import appium.common.BasicTestCase;
import org.testng.annotations.Test;
public class CrossApp extends BasicTestCase {
@Test
public void testCrossApp() throws Exception {
pageHelper.getPageNews().clickNewsItem(2);
pageHelper.getPageNewsDetail().clickShareIcon();
pageHelper.getPageNewsDetail().clickShareToQQOption();
pageHelper.getPageNewsDetail().enterNameInQQLoginPage("277860602");
}
}
执行下脚本可以看到成功往用户名输入框输入了信息,说明跨应用的操作是成功的。