Исключение недоступности браузера при съемке скриншота с помощью AppiumDriver - PullRequest
0 голосов
/ 11 февраля 2019

Мы используем Perfecto для тестирования нашего мобильного приложения.Наш код автоматизации генерирует исключение на этапе, когда мы пытаемся сделать снимок экрана экрана Mobile.

Мы попытались изменить версии jar-файлов.Изначально у нас был 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

Исключение находится на этапе - Источник файла= 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;         

}

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я думаю, вы можете попробовать Experitest SeeTest для своего проекта по автоматизации мобильных устройств. Он имеет встроенный механизм отчетности, который делает снимок экрана.Он поддерживает AppiumDriver в вашем случае.Вы можете взглянуть на документацию Experitest

String screenshotPath = client.capture("CaptureScreenshot")

ScreenshotPath будет содержать путь к захваченному скриншоту

0 голосов
/ 12 февраля 2019

Я собрал билет в службу поддержки Perfecto, и они предложили добавить новую возможность, чтобы избавиться от времени.

capabilities.setCapability("host",”Cloud URL”);

Теперь с 2.53.1 и этой новой добавленной возможностью, мыумеют снимать скриншот.

...