2015-07-13 17 views
9

Aggiornamento
Riferimenti: perfecto mobile e device anywhereCome posso controllare lo schermo del cellulare dal browser?


sto lavorando su una soluzione di test cellulare basato nube che dovrebbe sostenere sia per iOS e Android. Richiede che i dispositivi mobili connessi vengano gestiti dal browser.

Ho imparato che un dispositivo mobile ha un agente sorta di programma (che richiede dispositivo da radicata) installato che

  • flussi schermo mobile al browser
  • e iniettare eventi

C'è qualche altro approccio per realizzare questo possibile senza il rooting/jail breaking del dispositivo?

Questa domanda potrebbe sembrare molto ampia, ma ho cercato di capire come muoversi nella giusta direzione.

Per iOS, sto prendendo in considerazione lo this SOF question.

Qualsiasi puntatore è apprezzato.


Update 1:
This question è vicino a quello che sto cercando.

Aggiornamento 2: ho trovato Android Screen Library per i dispositivi Android e hanno testato su alcuni dispositivi. Non richiede il root del dispositivo, ma richiede il riavvio del servizio da Command Line su ogni dispositivo, il riavvio e non è possibile farlo funzionare su Lollipop..

Update 3: Mentre Android Screen Library aiuta a catturare lo schermo senza radicamento, ma non aiuta a iniezione di eventi. Anche la cattura dello schermo sembra errata - a volte cattura con la patch nera e non funziona su Lollipop!

Update 4: Riferimenti: perfecto mobile e device anywhere Sembra che stanno utilizzando ADB di gestire molte cose come app installazione/disinstallazione, l'invio degli eventi tramite adb shell input tap x y. Qualcuno può per favore versare un po 'di luce?

Update 5: mi sono imbattuto this SO Post da Adrian Taylor, un ingegnere ex-RealVNC. Questa è la spiegazione più dettagliata. Sebbene Android Lollipop abbia le API MediaProjection ma sembra archiviare gli screenshot come file MP4 su sdcard. Inoltre, come da google dashboard - Ago 2015 aggiornamento Lollipop è ancora circa il 15% della base di installazione di Android, quindi Kitkat deve essere considerato per qualsiasi soluzione.

Update 6: ho trovato libvncserver, chiedendosi se farà il lavoro. Verificherò e posterò il risultato.

Grazie

+1

Gentilmente aggiungi un commento con il tuo voto negativo;) Mi aiuterà. – iuq

+0

Non sono sicuro che sia quello che stai cercando, ma puoi automatizzare i test dell'interfaccia utente con JavaScript. [Tutorial] (http://code.tutsplus.com/tutorials/introduction-to-ios-testing-with-ui-automation--cms-22730), [Documentation] (https://developer.apple.com/ library/mac/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html) –

+0

@Islam Q - grazie, questo è davvero un buon articolo. Ma la mia domanda è leggermente diversa in quanto riguarda più la connettività e anche la soluzione verrà utilizzata principalmente per i test manuali. – iuq

risposta

4

Usare WebKit, questo ti porterà praticamente il più vicino è possibile ottenere e ancora più che probabile che passare attraverso il processo di approvazione con Apple

Ecco un semplice esempio, questo rende praticamente un selettore sulla pagina web, invia il valore stringa a me sull'app, si elabora il valore e si invia il risultato e quindi si pubblica come titolo della pagina Web.

<h2 id="headline">loading...</h2> 
<select id="selector"> 
    <option value="systemVersion" selected>iOS Version</option> 
    <option value="systemName">System Name</option> 
    <option value="name">Device Name</option> 
    <option value="model">Device Model</option> 
    <option value="userInterfaceIdiom">User Interface</option> 
    <option value="identifierForVendor">Vendor ID</option> 
</select> 

Ecco il javascript:

var headline = $("#headline"); 
var selection = $("#selector"); 

function set_headline (text) { 
    headline.text(text); 
} 

function call_native() { 
    var prop = selection.val(); 
    set_headline("asked for " + prop + "..."); 
    window.webkit.messageHandlers.observe.postMessage(prop); 
} 

setTimeout(call_native, 1000); 
selection.on("change", call_native); 

Sulla fine applicazione, è possibile impostare la seguente:

// configurare WebView e luogo WebView sullo schermo

[controller addScriptMessageHandler:self name:@"observe"]; 
configuration.userContentController = controller; 
NSURL *jsbin = [NSURL URLWithString:k_JSBIN_URL]; 

_webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration]; 
[_webView loadRequest:[NSURLRequest requestWithURL:jsbin]]; 
[self.view addSubview:_webView]; 

maniglia WebView eventi:

-(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message 
{ 
// Check to make sure the name is correct 
    if ([message.name isEqualToString:@"observe"]) { 
     // Log the message received 
     NSLog(@"Received event %@", message.body); 

     // Then pull something from the device using the message body 
     NSString *version = [[UIDevice currentDevice] valueForKey:message.body]; 

     // Execute some JavaScript using the result 
     NSString *exec_template = @"set_headline(\"received: %@\");"; 
     NSString *exec = [NSString stringWithFormat:exec_template, version]; 
     [_webView evaluateJavaScript:exec completionHandler:nil]; 
    } 
} 
+0

Grazie per la risposta. Funzionerà anche solo per applicazioni web/ibride o app native? ... scusa, non ho ancora provato nulla su iOS perché sto ancora cercando di trovare una soluzione Android. – iuq

+0

questo è puro nativo, questo non è per ibrido, è tutto per ObjC in questo caso, ecco perché è così potente – Loxx

Problemi correlati