炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述Appium自动化中截图的问题相关的知识,希望能为你提供帮助。
【Appium自动化中截图的问题】在用Appium做UI自动化过程中,大家会发现测试报告很重要,而在测试报告中截图很重要。
因为很多公司都是用Jenkins作为持续集成工具,所以要让执行自动化测试的人看明白自动化在跑什么,哪里失败了,关键节点都需要截图。
怎么做呢,目前项目中是这么实现的:
1.实现截图功能类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public
static
String screenShot(ShipperandroidEmulator ae) {
String dir =
"screenshot" ;
// TODO
String time =
new
SimpleDateFormat( "yyyyMMdd-HHmmss" ).format( new
Date());
String screenShotPath = dir + File.separator + time +
".png" ;
AndroidDriver augmentedDriver =
null ;
augmentedDriver = ae.getAndroid();
try
{
File sourceFile = ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(sourceFile,
new
File(screenShotPath));
}
catch
(Exception e) {
e.printStackTrace();
return
"Failed to screenshot" ;
}
return
screenShotPath.replace( "\\" ,
"/" );
} |
2.用screenShot实现错误处理类:
1
2
3
4
5
6
7
8
9
10
|
private
void
handleFailure(String notice) {
String png = LogTools.screenShot( this );
String log = notice +
" >
>
capture screenshot at "
+ png;
logger.error(log);
if
(GlobalSettings.baseStorageUrl.lastIndexOf( "/" ) == GlobalSettings.baseStorageUrl.length()) {
GlobalSettings.baseStorageUrl = GlobalSettings.baseStorageUrl.substring( 0 , GlobalSettings.baseStorageUrl.length() -
1 );
}
Reporter.log(log +
"<
br/>
<
img src=https://www.songbingjia.com/""
+ GlobalSettings.baseStorageUrl +
"/"
+ png +
"\" />
" );
Assert.fail(log);
} |
3.对所有appium界面操作类进行处理:
1
2
3
4
5
6
7
8
9
10
11
12
|
public
void
click(By by) {
expectElementExistOrNot( true , by, timeout);
try {
clickTheClickable(by,System.currentTimeMillis(), 2500 );
handleSuccess( "Succeed to click "
+ by);
} catch (Exception e){
e.printStackTrace();
handleFailure( "Failed to click "
+ by);
}
logger.info( "Clicked "
+ by);
} |
4. 不能点击时候重试点击操作
private void clickTheClickable(By byElement, long startTime, int timeOut) throws Exception {
try {
findElementBy(byElement).click();
} catch (Exception e) {
if (System.currentTimeMillis() - startTime >
timeOut) {
logger.warn(byElement+ " is unclickable");
throw new Exception(e);
} else {
Thread.sleep(500);
logger.warn(byElement + " is unclickable, try again");
clickTheClickable(byElement, startTime, timeOut);
}
}
推荐阅读