2012-01-18 14 views
18

Ho un app per iPhone che sto testando con UI Automation.I tentativi di toccare un UIButton in un UITableViewCell utilizzando automazione interfaccia utente falliscono con "non poteva essere sfruttato"

Ho un pulsante in un UITableViewCell ma quando provo a toccarlo utilizzando l'automazione dell'interfaccia utente ottengo il seguente errore.

Script threw an uncaught JavaScript error: target.frontMostApp().mainWindow().scrollViews()[0].elements()[element_name].tableViews()[0].elements().firstWithPredicate(name contains[c] 'Brooklyn').elements()["detailsButton"] could not be tapped 

mi hanno permesso di accessibilità sul pulsante in Interface Builder e contrassegnati con il marchio di accessibilità (e identificatore) "detailsButton". Posso recuperare l'elemento del pulsante e ho verificato che sia valido. Non riesco a toccarlo per qualche motivo.

UIATableCell Brooklyn

L'UIButton un pulsante rettangolare rotondo con l'interazione utente abilitato. Grazie per qualsiasi feedback.

+0

Hai provato impostando un ritardo come target.delay (3); prima di toccare il pulsante? –

+2

Come pubblicare anche il tuo codice, non aggiungere il messaggio di errore. –

+0

Penso che sia un problema per quanto riguarda l'aggiunta del pulsante al tableviewcell - Inserisci il codice per una risposta migliore –

risposta

1

È possibile allocazione del UIButton eccezione utilizzando il pulsante rotondo rett. Inoltre, è possibile impostare l'azione di destinazione del pulsante nella classe controller in cui sono presenti i metodi delegate della vista tabella.

0

devi usare ButtonType=Custom

0
but=[UIButton buttonWithType:UIButtonTypeCustom]; 

È necessario utilizzare un tipo di pulsante personalizzato.

+2

Probabilmente dovresti spiegare qualcosa di più che semplicemente pubblicare una singola riga di codice. – Heskja

0

Non so il motivo per cui si sta utilizzando UI Automation. Ma per quanto ne so sull'aggiunta di UIButton in una tableviewcell-

1) basta aggiungere UIButton in UITableViewCell.
2) impostare il valore del tag UIButton's e aggiungere la destinazione a tale pulsante.
3) Nel metodo pulsante di destinazione, è possibile ottenere l'oggetto UIButton e fare le tue cose laggiù ..

Spero che questo ti aiuta.

1

Prova asserendo prima se esiste il tasto, usare tuneup_js di facili affermazioni. Quindi affermare se il pulsante è abilitato.

Hai provato: target.frontMostApp().mainWindow().scrollViews()[0].elements()[element_name].tableViews()[0].**cells()**.firstWithPredicate("name contains[c] 'Brooklyn'").elements()["detailsButton"]?

Post ha anche un'altra foto che mostra l'UIATableCell ampliata laddove esiste la detailsButton.

-1

Hai provato questo?

target.frontMostApp().mainWindow().scrollViews()[0].tableViews()[0].elements().firstWithPredicate(name contains[c] 'Brooklyn').buttons()["detailsButton"].tap() 
0

Ho incontrato lo stesso problema. Dopo aver aggiunto il ritardo, funziona.

UIATarget.localTarget().delay(1); 
0

È possibile inviare un evento tap sopra l'intera finestra:

function tap_from_window(elem) { 
    var mainWindow = target.frontMostApp().mainWindow(); 
    var elemRect = elem.rect(); 
    var windowRect = mainWindow.rect(); 

    var xPos = (20 + elemRect.origin.x)/windowRect.size.width; 
    var yPos = (50 + elemRect.origin.y)/windowRect.size.height; 

    mainWindow.tapWithOptions({tapOffset:{x:xPos, y:yPos}});  
} 

var target = UIATarget.localTarget(); 
var window = target.frontMostApp().mainWindow(); 
var tableView = window.scrollViews()[0].elements()[element_name].tableViews()[0]; 
tap_from_window(tableView.elements().firstWithPredicate(name contains[c] 'Brooklyn')) 

Come molte cose legate a iOS, non ho idea del perché l'elemento non può essere sfruttato direttamente. Ho adattato la funzione di cui sopra dal codice in questo post: scrollToVisible error while testing on a device, UIAutomation

Problemi correlati