2015-12-07 4 views
0

Я использовал захват экрана [public void getScreenshot(){...}] в Appium для сбоев тестирования и запуска. Я бы хотел вызвать тот же метод для каждого findElement() в моем пакете. Я попытался сделать это:Несколько скриншотов в Appium для гибридных приложений

Создание пользовательского драйвера, как:

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() в моем номере?

ответ

1

В моем опыте скриншоты работать только в контексте 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); 
      } 
     } 
    } 
+0

какой-либо конкретной причины для присвоения originalContext null? – nullpointer

+0

'@Override public List findElements (By by) { Строка originalContext = getContext(); if (! OriginalContext.equals ("NATIVE_APP")) { контекст ("NATIVE_APP"); } try { getScreenshot(); // Перед снимком экрана return super.findElements (by); } наконец { контекст (originaContext); } } 'трюк для меня – nullpointer

+0

это способ указать, что в конечном итоге нет необходимости переключать контекст. В качестве альтернативы это может быть, если (! "NATIVE_APP" .equals (originalContext)) { контекст ("NATIVE_APP"); } try { getScreenshot(); // Перед снимком экрана return super.findElements (by); } наконец { if (! "NATIVE_APP" .equals (originalContext)) { контекст (originaContext); } } - вопрос предпочтения кодирования. –

Смежные вопросы