Sono di fronte a un problema nell'automazione di un'applicazione Web utilizzando il driver Web di selenio.Come può conoscere il driver Web di selenium quando la nuova finestra è stata aperta e quindi riprendere l'esecuzione
La pagina Web ha un pulsante che quando viene premuto apre una nuova finestra. Quando uso il seguente codice, si getta OpenQA.Selenium.NoSuchWindowException: No window found
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
Per risolvere il problema di cui sopra aggiungo Thread.Sleep(50000);
tra il pulsante clic e SwitchTo
dichiarazioni.
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
Thread.Sleep(50000); //wait
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
ha risolto il problema, ma io non voglio utilizzare l'istruzione Thread.Sleep(50000);
perché se la finestra richiede più tempo per aprire, il codice può fallire e se la finestra si apre velocemente allora fa il test lento inutilmente.
C'è un modo per sapere quando la finestra è stata aperta e quindi il test può riprendere la sua esecuzione?
Grazie per la risposta. Funziona. – Ozone
Ci può essere un caso in cui la nuova scheda è aperta ma gestita non ancora aggiunta all'istanza dell'unità. La mia soluzione è prima di fare clic sul numero di handle corrente e poi all'interno mentre il ciclo controlla se il conteggio è cambiato. Solo allora passa alla scheda appena aperta come questa finestra 'driver.switchTo(). (Gestisce [handles.count() - 1]);' dove 'handle' sono aggiornati ad ogni iterazione. – Edgar