我想在UI测试后运行用于从android设备复制屏幕截图的任务。 我在模块中添加了build.gradle:
tasks.whenTaskAdded { task ->
if (task.name == 'connectedMyAppDebugSources') {
task.finalizedBy {
// here is my task
}
}
}
当我使用此任务时:
def fetchScreenshotsTask = task('fetchScreenshots', type: Exec, group: 'reporting') {
executable "${android.getAdbExe().toString()}"
args 'pull', '/sdcard/Pictures/screenshots/.', reportDirectory
}
任务最后运行,但是如果测试在多个设备上运行,则此任务不起作用。 然后,我创建了一个任务,该任务获取所有正在运行的设备的ID,并为每个设备运行另一个复制任务:
task fetchScreenshotsForAllDeviceTask(group: 'reporting') {
String result = ""
new ByteArrayOutputStream().withStream { os ->
def output = exec {
executable "${android.getAdbExe().toString()}"
args 'devices'
standardOutput = os
}
result = os.toString()
}
List list = result.split('\n')
.collect {it.split('\t').head()}
.drop(1)
for(String item: list) {
createDir(item)
copy(item)
clear(item)
}
}
这是每个设备的“复制”任务:
def copy(String device) {
def copyTask = exec {
executable "${android.getAdbExe().toString()}"
args '-s', item, 'pull', '/sdcard/Pictures/screenshots/.', reportDirectory
}
}
问题是: 当我将fetchScreenshotsForAllDeviceTask任务插入到块中时,它将在测试开始时运行:
task.finalizedBy {
// here is my task
}
如果将“ fetchScreenshotsTask”放在同一块中,它将在最后运行。
答案 0 :(得分:0)
任务fetchScreenshotsForAllDeviceTask(group:'reporting')在配置阶段gradle生命周期中运行。 要在执行阶段运行此任务,需要在doLast块中运行此任务,或在任务中添加“ <<”:
task fetchScreenshotsForAllDeviceTask(group: 'reporting') << {
//here is task code
}