Gli oggetti GUI sono disposti in due gerarchie correlate: principale-secondaria e proprietario-proprietà. Un esempio di relazione principale-secondaria è una finestra di dialogo e un pulsante in essa contenuto. Un esempio di relazione proprietario-proprietà è una finestra di livello superiore e una finestra di dialogo. Utilizzare un dei tipi di gerarchia per un oggetto.
Nell'implementazione del proxy, è comune per il modello di oggetto sottostante (ad esempio, Java™ e HWND) confondere queste due relazioni e trattare la relazione proprietario-proprietà come una relazione principale-secondaria asimmetrica. In questo caso, il proxy deve negare di avare un elemento principale quando il modello di relazione preferibile è proprietario-proprietà. I metodi che è possibile utilizzare per passare attraverso la gerarchia sono getParent(), getChildren(), getOwner() e getOwned().
Le proprietà sono denominate valori. La proprietà stessa non ha un tipo; il valore ha un tipo. Evitare che i proxy restituiscano tipi diversi per la stessa proprietà. Talvolta un valore di proprietà può essere un riferimento ad un oggetto piuttosto che un valore. Se tale valore viene restituito ad uno script, viene restituito come TestObject. I metodi per accedere alle proprietà includono getProperty(), setProperty(), getProperties() e getNonValueProperties().
Per impostazione predefinita, i nuovi oggetti proxy potrebbero non disporre dei pesi e delle proprietà di riconoscimento degli oggetti. Utilizzare la libreria oggetti per assegnare i pesi e le proprietà di riconoscimento. I metodi per l'accesso ai pesi e alle proprietà di riconoscimento dell'oggetto sono getRecognitionProperties() e getRecognitionPropertyWeight(). Se all'interno dell'oggetto principale esiste più di un oggetto della stessa classe, aggiungere la proprietà .classIndex (un valore numerico positivo che inizia con 0), come una proprietà di riconoscimento per l'oggetto secondario.
Generalmente, l'intera gerarchia degli oggetti risulta associata. Tuttavia, alcuni oggetti sono suscettibili di frequenti cambiamenti tra build dell'applicazione di test. Ad esempio, in Java, è comune aggiungere insieme pannelli a oggetti cluster. Con Functional Tester l'utente può specificare di non associare l'oggetto proxy. Anche se gli oggetti non associabili non sono nell'associazione oggetti di test, la gerarchia di oggetti ne effettua un elenco mentre si passa attraverso la gerarchia principale-secondaria. I metodi per la gestione della gerarchia associabile includono shouldBeMapped(), getMappableParent() e getMappableChildren().
In alcuni casi, il modello di oggetti sottostante supporta una nozione delle proprietà, ad esempio, Java, HTML e .NET. Functional Tester consente ai proxy di implementare ulteriori proprietà. Se un proxy implementa direttamente una proprietà, il nome della proprietà deve avere un diverso modello per evitare confusione con qualsiasi proprietà dell'oggetto. Iniziare il nome delle proprietà regolari che potrebbero essere utilizzate per il riconoscimento con un punto (.). Alcune proprietà di gestione vengono utilizzate dal framework e non possono essere utilizzate per il riconoscimento; tali nomi di proprietà iniziano con un simbolo di numero (#).
In molti casi, l'oggetto sottostante dispone di metodi che possono essere rilevati e richiamati. Questi di solito vengono gestiti direttamente dall'implementazione di dominio e framework, ma getMethod() viene implementato comunemente su un proxy base in un dominio.
Quando possibile, eseguire la riproduzione di azioni del mouse dalla lente. Se un nome di metodo include "click" o "drag", far eseguire l'azione agli eventi mouse. Non utilizzare i nomi di metodo come "click" o "drag" se gli eventi mouse non vengono utilizzati per implementare l'azione. Non utilizzare i nomi di metodo che fanno riferimento a tasti o la tastiera se gli eventi tastiera non implementano l'azione. Fare in modo che i metodi riflettano l'azione che sta per essere eseguita e affidabile durante la riproduzione. Evitare euristiche.
Gli oggetti possono contenere altri oggetti e potrebbero avere una struttura interna non esposta come uno o più oggetti nidificati. Ad esempio, un elenco potrebbe contenere degli elementi, ma questi non sono esposti dall'oggetto della lista come oggetti stessi. Questo tipo di comportamento è comune negli oggetti basati su HWND. I metodi più comuni di gestione degli elementi secondari sono getSubitem() e i metodi di azione del mouse come click(), drag(), e doubleClick(). Il metodo getSubitem() restituisce un valore null o una stringa.
Utilizzare una delle seguenti strategie se non si desidera che gli oggetti negli elementi secondari siano esposti come oggetti completamente sviluppati:
Dichiarare il proxy elemento secondario come non associabile. L'oggetto al punto comunica con il relativo elemento principale e il proxy elemento principale è responsabile delle azioni di registrazione sull'oggetto aggregato e del supporto alla riproduzione delle azioni GUI basate sull'elemento secondario.
Durante la registrazione il proxy elemento secondario passa le chiamate processMouseEvent() al relativo elemento principale. Il proxy elemento principale è responsabile delle azioni di registrazione sull'oggetto aggregato e del supporto alla riproduzione delle azioni GUI basate sull'elemento secondario.
Durante la registrazione il proxy elemento secondario elabora le chiamate processMouseEvent() e genera le chiamate di metodo sull'oggetto elemento principale. Il proxy elemento principale non è responsabile delle azioni di registrazione sull'oggetto aggregato ma è responsabile del supporto alla riproduzione delle azioni GUI basate sull'elemento secondario.
Disporre di un nuovo tipo di riferimento di oggetto che contenga tag in modo che il riferimento non sia registrato dopo che viene usato come ancora. Ciò abilita l'ancoraggio di un oggetto utilizzando elementi secondari di un altro oggetto. È possibile associare l'oggetto nidificato come un elemento secondario dell'oggetto principale.
Attenersi a queste regole quando si implementano eccezioni ed errori:
Non generare eccezioni interne o private dai proxy. La documentazione API per i proxy in uso potrebbe non essere disponibile. Utilizzare le eccezioni standard, preferibilmente RationalTestException.
Riutilizzare le eccezioni dal pacchetto com.rational.test.ft in Java o lo spazio nomi Rational.Test.Ft in .Net. Se un proxy java genera un'eccezione com.rational.test.ftMethodNotFoundException e lo script è scritto in VB, lo script VB acquisisce un'eccezione Rational.Test.Ft.MethodNotFoundException. Se viene generata un'eccezione che non ha un nome che inizia con com in com.rational.test.ft viene messa in ordine logico come eccezione WrappedException.
Tutte le RationalTestException che possono essere messe in ordine logico devono supportare un creatore che assume un solo parametro stringa.
Se si aggiunge una nuova eccezione in un proxy implementato in Java che si prevede venga restituito al client, accertarsi di implementare la stessa eccezione in .Net.
In Java, le eccezioni devono essere dichiarate, il che potrebbe non risultare utile per alcuni tester. Diverse eccezioni derivano da quasi ogni metodo GUI, utilizzare quindi le eccezioni di runtime anziché le eccezioni in Java. Evitare di utilizzare errori. Un errore causerebbe l'arresto dell'intera sessione del registratore o di riproduzione.
Se l'oggetto non viene rilevato, il framework genera un'eccezione ObjectNotFoundException. Se l'oggetto viene rilevato, e un elemento secondario è specificato ma non viene rilevato, il proxy deve generare un'eccezione SubItemNotFoundException. L'eccezione SubItemNotFoundException viene rilevata dal framework e viene riprovato automaticamente.
Se le coordinate di input fanno clic su un oggetto o un elemento secondario che è oltre la regione, modificare le coordinate in modo da includere la regione nell'oggetto o nell'elemento secondario. Aggiungere un meccanismo per generare un'avvertenza nel registro quando si verifica ciò. Il proxy potrebbe dover utilizzare clic basati su coordinate in quanto la struttura della schermata dell'oggetto non può essere completamente descritta. Ad esempio, su un JTree, la geometria PLUS_MINUS non è nota, ma può essere trovata rispetto all'elemento secondario a cui si applica. È accettabile per il proxy espandere l'area dell'elemento secondario in modo da includere PLUS_MINUS. È possibile utilizzare coordinate negative per gli elementi secondari. Documentare tutte le violazioni rispetto al comportamento normale. Accertarsi che nessun elemento secondario con un clic di coordinate specificato faccia clic oltre l'oggetto.
Se si fa clic su un oggetto errato, viene generata un'eccezione com.rational.test.ft.CoordinateOnWrongObjectException. L'oggetto errato potrebbe sovrapporsi alla destinazione corretta. È possibile modificare le coordinate per evitare l'oggetto secondario all'interno di un contenitore. Ignorare il punto specificato e ricercare in un altro punto un oggetto appropriato su cui fare clic. Evitare di registrare le coordinate su oggetti che hanno elementi secondari associabili e non consentire clic sugli oggetti errati.
Se si fa clic su un elemento secondario errato, viene generata un'eccezione com.rational.test.ft.CoordinateOnWrongSubitemException. Questa eccezione non si applica ai click associati ad un oggetto in cui un elemento secondario non è specificato. Questo tipo di clic si applica solo quando si fa clic sull'oggetto e su eventuali elementi secondari in tale oggetto. In tale caso, l'elemento secondario errato si sovrappone alla destinazione corretta che è probabilmente un elemento secondario. Evitare di registrare le coordinate su elementi secondari che hanno elementi secondari nidificati in modo da non incorrere in questa eccezione. Ignorare il punto specificato e ricercare un altro punto in un elemento secondario appropriato su cui fare clic.