2014-10-02 7 views
6

Ho riscontrato un problema con l'arrivo di Intern 2 per la presenza di elementi. In Stagista 1 stavo usando wait() per impostare periodi di tempo espressi affinché la pagina attenda che un elemento sia presente dopo un'azione dell'utente. Con Intern 2 sembra essere setFindTimeout() che dovrebbe sempre indicare a un metodo find() di attendere un po 'per la presenza dell'elemento. Ho impostato setFindTimeout() e ho provato a utilizzare pollUntil per gestire queste attese, ma i test non hanno ancora esito positivo con l'errore "elemento non visibile".setFindTimeout e pollUntil con Intern per gli elementi che non sono visibili sul caricamento iniziale della pagina

Ecco un test di esempio che utilizza gli stessi requisiti dei miei test reali e sta cercando un elemento Id che appare 5 secondi dopo questi carichi page.

define([ 
'intern!object', 
'intern/chai!assert', 
'require', 
'tests/util', 
'intern/dojo/node!leadfoot/Command', 
'intern/dojo/node!leadfoot/Session', 
'intern/dojo/node!leadfoot/helpers/pollUntil' 
], function (registerSuite, assert, require, util, Command, Session, pollUntil) { 

registerSuite([ 
    { 
     name: 'testing_find_by_wait', 

     test_create_form_on_web: function() { 
      console.log('Create a form with account, number, number and formula fields') 

      return this.remote 
       .setFindTimeout(10000) 
       .setWindowSize(1280, 960) 
       .get("http://www.kgstew.com/waittest.html") 
       .then(pollUntil('return document.getElementById("demo")', 10000)) 
       .findById('demo') 
        .click() 
        .end() 

     } 
    } 
]); 
}); 
+0

Qual è l'errore effettivo che ottieni e da quale linea? –

+0

L'errore è "ElementNotVisible: [POST http://10.0.1.34:4444/wd/hub/session/204fe805-74f6-401d-a22f-5afd976b547c/element/9/click] elemento non visibile" nella riga 29 – kgstew

+0

Quando il test eseguito non sembra che sia in attesa per almeno 10 secondi prima che determini che l'elemento non è visibile. La mia comprensione è che questo è ciò che 'setFindTimeout()' dovrebbe fare. – kgstew

risposta

2

Grazie C Snover per il tuo aiuto per ottenere questo risultato.

Stavo male interpretando il modo in cui setFindTimeout() e pollUntil funzionavano. Entrambi cercano gli elementi presenti nel DOM (che erano) ma se l'elemento non è visibile (ad esempio lo stile è display:none) quando viene emesso un comando click(), il test avrà esito negativo.

Quello che volevamo fare è aspettare che l'elemento sia presente dopo un qualche tipo di azione da parte dell'utente. Ho avuto l'idea da C Snover di vedere element.offsetWidth per essere maggiore di 0.

Abbiamo creato la seguente utility nella nostra suite di test.

element_visible_by_class: function(elem) { 
    return function(elem) { 
     elem = document.getElementsByClassName(elem); 
     if (!elem || elem.length == 0) { return null; } 
     elem = elem[0]; 
     return (elem.offsetWidth > 0 && elem.offsetHeight > 0) ? elem : null; 
    } 
}, 

Ora da qualsiasi prova che possiamo chiamare .then(pollUntil(util.element_visible_by_class(), ['class_name'], 10000)) e aspetteremo fino a quel elemento è visibile sulla pagina.

2

L'elemento viene scoperto correttamente. Per errore, non riesce a click sull'elemento. Questo sta accadendo perché l'elemento è vuoto e non ha uno stile quindi è zero e non può essere cliccato nel momento in cui stai provando a cliccarci sopra. Devi aspettare che l'elemento esista ed essere visibile prima di provare a fare clic su di esso.

+0

Sono d'accordo e ho usato 'setFindTimeout()' e l'helper 'pollUntil' per cercare di ottenere questa attesa piuttosto che impostare un' sleep() 'esplicito. La mia comprensione è che 'setFindTimeout' dovrebbe impostare la quantità di tempo che ogni metodo' find() 'dovrebbe aspettare prima di proseguire. Non sto usando correttamente questi metodi di attesa e gli helper? – kgstew

+0

Ciò significa che l'app Web deve essere modificata per impostare alcune proprietà della finestra al termine delle chiamate asincrone, in modo che tali proprietà possano essere interrogate con pollUntil in intern? – KiaMorot

Problemi correlati