我一直在Appium中使用屏幕捕获[public void getScreenshot(){...}
]来处理测试失败和启动。我想为我的套件中的每个findElement()
调用相同的方法。我试过这样做:
创建自定义驱动程序为:
public class CustomDriver extends AppiumDriver{
public WebElement scrollToExact(String element) {
WebElement x = null;
return x;
}
public WebElement scrollTo(String element){
WebElement y = null;
return y;
}
@Override
public List<WebElement> findElements(By by) {
try {
getScreenshot();
}
catch (IOException iox){
System.out.println(iox.getMessage());
}
return by.findElements(this);
}
@Override
public WebElement findElement(By by) {
try {
getScreenshot();
}
catch(IOException iox){
System.out.println(iox.getMessage());
}
return by.findElement(this);
}
}
使用此驱动程序创建测试套件。
Q1.虽然这对我来说很好,但当我将上下文切换到Webview时,我的驱动程序不会响应在该上下文中查找元素。我在这里跟进的有什么问题吗?[如果需要,将提供详细信息,但自己不确定。]
Q2.我缺少什么更简单的东西来获取套件中每个findElement()
调用的屏幕截图吗?
根据我的经验,屏幕截图只在NATIVE_APP上下文中工作,所以如果你在WebView上下文中,你必须切换到本地上下文,然后再切换回来,比如:
@Override
public List<WebElement> findElements(By by) {
String originalContext = getContext();
if ("NATIVE_APP".equals(originalContext)) {
originalContext = null; // no need to switch
} else {
context("NATIVE_APP");
}
try {
getScreenshot(); // Before screenshot
return super.findElements(by);
} finally {
if (originalContext!=null) {
context(originaContext);
}
}
}