2015-05-05 6 views
5

Usiamo Nightwatch per automatizzare alcuni dei nostri test dell'interfaccia utente. Alcuni dei test attuali sono piuttosto fragili, per lo più dovuti a strani selettori CSS, e sto cercando di semplificarli. Ma alcuni dei semplici selettori CSS che mi aspetterei di lavorare sono, beh, no.Nightwatch non riesce a individuare l'elemento tramite ID css o selettori di classe

Sto cercando di trovare questo nidificazione <a> tag:

<a class="btn btn-quote btn-crm" href="/crm/" id="btnEndSession" style="display: inline-block;">End Session</a> 

Ecco un po 'di codice che sta lavorando:

.waitForElementVisible('#quoteSummary > div > div > div > div > a:nth-child(2)', 1000) 
.click('#quoteSummary > div > div > div > div > a:nth-child(2)') 

Ma questo è un selettore CSS brutto, e mi piacerebbe per sostituirlo con questo:

.waitForElementVisible('#btnEndSession', 1000) 
.click('#btnEndSession') 

Come il <a> el E mi interessa avere in effetti l'id di btnEndSession, sembra che dovrebbe funzionare. Ma non è così: errori di nightwatch con uno dei suoi "Timeout in attesa dell'elemento < #btnEndSession> da visualizzare per messaggi di 10000 millisecondi".

Ho anche provato:

.waitForElementVisible('.btn-crm', 10000) 
.waitForElementVisible('a[id=btnEndSession]', 10000) 
.waitForElementVisible('a#btnEndSession', 10000) 

Ma quelli non funzionano neanche. Qualche idea sul perché questi selettori più semplici non stiano raccogliendo l'elemento?

EDIT:

OK, abbastanza stranamente, questo ha funzionato:

.waitForElementVisible('a.btn-crm', 1000) 

Tuttavia, nello stesso test, alla ricerca di questo elemento:

<select class="custom-form-control crm-result-visit select-hidden" id="crm-result-visit" name="crmResultVisit"> 
    <option value=" ">Select</option> 
    <option value="Not Home">Not Home</option> 
</select> 

Tutti questi diversi selettori falliscono per trovare l'elemento:

.waitForElementVisible('select.crm-result-visit', 10000) 
.waitForElementVisible('select#crm-result-visit', 10000) 
.waitForElementVisible('#crm-result-visit', 10000) 
.waitForElementVisible('.crm-result-visit', 10000) 
.waitForElementVisible('select[id=crm-result-visit]', 10000) 

Sono un po 'riluttante a concludere che il supporto del selettore CSS in Nightwatch è piuttosto buggato.

FWIW, stiamo usando la versione 0.6.7 di Nightwatch.

+0

fa 'un'opera # btnEndSession'?Non ho mai usato Nightwatch.js ma sono incline a pensare che sia anche buggy. – BoltClock

+0

Ottima domanda. Sfortunatamente, anche questa sintassi fallisce, in entrambi i miei casi di test sopra. –

+0

Ciò che rende questo così intrigante è la natura del messaggio di errore - suggerisce che il parser del selettore CSS sta analizzando i selettori bene, è ciò che sta facendo con i selettori/elementi disattivati. – BoltClock

risposta

1

Per quel che vale, abbiamo finito per abbandonare Nightwatch, e andando dritto al Selenio (C#, nel nostro caso), che non sembrano avere questi problemi, e integrato meglio nel resto del nostro ambiente. Non un'ottima risposta, ma non ho più questo problema :-).

+0

Stai chiamando l'API Java direttamente da C#? – SuperUberDuper

+0

Usiamo la versione C# di Selenium scaricabile direttamente da questa pagina: http://www.seleniumhq.org/download/. Non so come sia implementato dietro le quinte, ma non penso che siano solo le associazioni C# che chiamano Java: ho l'impressione che si tratti di un'implementazione nativa in C#. Funziona molto bene. –

+0

sì deve essere))) – SuperUberDuper

1

Ho appena iniziato a utilizzare NightWatch JS, sto usando nightwatch v0.6.7. Seguente codice sta lavorando bene per me

module.exports = { 
    '1. test' : function (browser) { 
    browser 
     .url('<your url>') 
     .waitForElementVisible('select[id=crm-result-visit]',1000) 
     .click('select[id=crm-result-visit]'); 
    } 
}; 
-1

Non so se aiuta, ma oggi inciampo su questo problema e l'ho fatto funzionare dopo un po '.

Per impostazione predefinita, nightwatch sta utilizzando il selettore css, quindi l'aggiunta di ".useXpath()" ha risolto il problema. Quindi, controlla quale selettore stai usando per primo e poi usa quello richiesto.

Fonte: https://github.com/nightwatchjs/nightwatch-docs/blob/master/guide/using-nightwatch/using-xpath-selectors.md

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/16498794) –

+0

".useXpath()" risolto il problema e nel collegamento c'è la stessa cosa. quindi, la mia risposta è ". useXpath()". Il link è solo di riferimento se qualcuno vuole verificare. –

Problemi correlati