La pagina Web che sto testando utilizza il knockout. Su altre pagine del nostro sito che al momento non utilizzano il knockout non ho lo stesso problema. Lo scenario che ho è dove si apre la pagina, inserisco vari campi obbligatori e faccio clic sul pulsante Salva. A un certo punto, quando immette un valore nell'ultimo campo di testo e quando fa clic sul pulsante di salvataggio, i campi che in precedenza avevano i valori vengono cancellati e quindi lo script non può continuare. Ecco un esempio del codice che sto correndo:seleziona i campi dopo che SendKeys li aveva precedentemente compilati.
driver.findElement(By.id("sku")).clear();
driver.findElement(By.id("sku")).sendKeys(itemNo);
driver.findElement(By.id("desktopThankYouPage")).clear();
driver.findElement(By.id("desktopThankYouPage")).sendKeys(downloadUrl);
driver.findElement(By.id("mobileThankYouPage")).clear();
driver.findElement(By.id("mobileThankYouPage")).sendKeys(mobileDownloadUrl);
driver.findElement(By.id("initialPrice")).clear();
driver.findElement(By.id("initialPrice")).sendKeys(initialPrice);
driver.findElement(By.id("submitSiteChanges")).click();
Come ho detto, tra il momento si immette del testo nell'ultimo campo e il tempo non scatta salvare i campi che in precedenza aveva testo in loro si schiarì fuori, e quindi il mio test fallisce. Il problema è che non sempre accade. A volte il test funziona bene, altre volte no.
Ho provato a inserire Thread.sleep (x); dappertutto per vedere se la pausa in determinati punti risolverebbe il problema. Ho anche provato ad usare javascript per attendere in background qualsiasi ajax che potrebbe essere in esecuzione. Avere anche l'attesa implicita di driver.manage(). Timeouts(). ImplicitlyWait (10, TimeUnit.SECONDS). Nessuna di queste sembra aver fatto alcuna differenza.
sto correndo la versione 2.13 di server di selenio e tutti i miei test eseguito su Firefox 8.
Qualsiasi aiuto su questo sarebbe molto apprezzato!
Come è stato confermato che i valori impostati sono effettivamente impostati. Cosa succede nel tuo codice KO dopo aver fatto clic su Invia? Gli elementi dom associati a KO sono resi come parte di un modello? – madcapnmckay
Sì, ho verificato che i valori siano presenti nei campi prima di fare clic sul pulsante di invio. In realtà a volte il test passa. Il pulsante di invio prende il nostro oggetto associato e lo converte in JSON e lo invia tramite ajax alla nostra API. Sembra che prima di creare il JSON, il driver Web stia cancellando diversi campi. –
Dubito che il web driver stia cancellando i campi. Una possibilità più probabile è che la pagina stessa stia cancellando i campi a causa di un problema di temporizzazione, o potenzialmente di un bug nel codice del gestore di eventi, tuttavia hai menzionato che aggiungere il sonno non sembra aver risolto il problema. Hai aggiunto un sonno molto lungo (30 secondi) prima di inserire il testo in uno dei campi per escludere completamente un problema di temporizzazione? Hai aggiunto un secondo ritardo tra l'inserimento del testo in ciascun campo per escludere un problema di temporizzazione? –