Исключение недоступности браузера при съемке скриншота с помощью AppiumDriver
Мы используем Perfecto для тестирования нашего мобильного приложения. Наш код автоматизации генерирует исключение на этапе, когда мы пытаемся сделать снимок экрана экрана Mobile.
Мы попытались изменить версии банок. Изначально у нас был Selenium Remote Driver 2.48.2. Мы изменили это на 2.53.1, а также обновили все другие зависимые банки. В версии 2.48.2 мы продолжали получать исключение для недостижимого браузера, а теперь в версии 2.53.1 время ожидания истекло. Я включил детали исключения с версией 2.48.2 (с примером кода). Исключение с 2.53.1 содержит некоторые учетные данные, и я не уверен, как поделиться им.
Деталь исключения
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06'
System info: host: 'WDAAS6302-E1087', ip: '10.86.78.84', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_172'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:206)
at org.openqa.selenium.remote.RemoteWebDriver.getScreenshotAs(RemoteWebDriver.java:325)
at reusable.ReusableFuncs.capture(ReusableFuncs.java:167)
at automationFramework.Trial.main(Trial.java:160)
Caused by: java.lang.NullPointerException
at org.openqa.selenium.remote.ErrorCodes.toStatus(ErrorCodes.java:256)
at org.openqa.selenium.remote.JsonToBeanConverter.convert(JsonToBeanConverter.java:124)
at org.openqa.selenium.remote.JsonToBeanConverter.convert(JsonToBeanConverter.java:42)
at org.openqa.selenium.remote.http.JsonHttpResponseCodec.decode(JsonHttpResponseCodec.java:78)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:145)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:67)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:620)
... 5 more
Исключение составляет шаг - File source = ts.getScreenshotAs(OutputType.FILE);
Мобильная автоматизация является для нас довольно новым явлением, и нам трудно решить эту проблему.
public synchronized String capture(AppiumDriver<MobileElement> driver,String screenShotName) throws IOException
{
TakesScreenshot ts = (TakesScreenshot)driver;
String dest = System.getProperty("user.dir") +"\\ErrorScreenshots\\"+screenShotName+new SimpleDateFormat("yyyyMMdd_HHmm").format(new Date())+".png";
System.out.println("destination is "+ dest);
File source = ts.getScreenshotAs(OutputType.FILE);
File destination = new File(dest);
FileUtils.copyFile(source, destination);
destination = null;
dest = resize(dest);
destination = new File(dest);
String encodedfile = null;
try {
FileInputStream fileInputStreamReader = new
FileInputStream(destination);
byte[] bytes = new byte[(int)destination.length()];
fileInputStreamReader.read(bytes);
encodedfile = Base64.getEncoder().encodeToString(bytes);
System.out.println(encodedfile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "data:image/png;base64,"+ encodedfile;
}
1 ответ
Я собрал билет в службу поддержки Perfecto, и они предложили добавить новую возможность, чтобы избавиться от времени.
capabilities.setCapability("host",”Cloud URL”);
Теперь с 2.53.1 и этой недавно добавленной возможностью мы можем сделать снимок экрана.
Я думаю, что вы можете попробовать Experitest SeeTest
для вашего мобильного проекта автоматизации. Он имеет встроенный механизм отчетности, который делает снимок экрана. Поддерживает AppiumDriver
в твоем случае. Вы можете взглянуть на документацию Experitest
String screenshotPath = client.capture("CaptureScreenshot")
ScreenshotPath
будет держать путь к захваченному скриншоту