Ho qualche codice ti avrebbe fatto piacere. La soluzione più rapida è usare Popup Finder, ma ho anche creato il mio metodo. Non farei mai affidamento sull'ordine in cui i manici di Windows sono presenti per selezionare la finestra appropriata. un'altra finestra del Finder:
PopupWindowFinder finder = new PopupWindowFinder(driver);
driver.SwitchTo().Window(newWin);
Il mio metodo personalizzato. Fondamentalmente lo passi l'elemento che vuoi cliccare, il tuo webdriver, e opzionalmente il tempo di aspettare prima di cercare dopo aver fatto clic sull'elemento.
Prende tutte le maniglie attuali e crea un elenco. Usa questa lista per eliminare le finestre già esistenti da cui ci si sposta accidentalmente. Quindi fa clic sull'elemento che avvia la nuova finestra. Dovrebbe esserci sempre una sorta di ritardo dopo il clic, poiché nulla accade all'istante. E poi crea una nuova lista e la confronta con quella vecchia fino a quando non trova una nuova finestra o il ciclo scade. Se non riesce a trovare una nuova finestra, restituisce null, quindi se hai un webfinement incerto che non sempre funziona, puoi fare un controllo nullo per vedere se l'interruttore ha funzionato.
public static string ClickAndSwitchWindow(IWebElement elementToBeClicked,
IWebDriver driver, int timer = 2000)
{
System.Collections.Generic.List<string> previousHandles = new
System.Collections.Generic.List<string>();
System.Collections.Generic.List<string> currentHandles = new
System.Collections.Generic.List<string>();
previousHandles.AddRange(driver.WindowHandles);
elementToBeClicked.Click();
Thread.Sleep(timer);
for (int i = 0; i < 20; i++)
{
currentHandles.Clear();
currentHandles.AddRange(driver.WindowHandles);
foreach (string s in previousHandles)
{
currentHandles.RemoveAll(p => p == s);
}
if (currentHandles.Count == 1)
{
driver.SwitchTo().Window(currentHandles[0]);
Thread.Sleep(100);
return currentHandles[0];
}
else
{
Thread.Sleep(500);
}
}
return null;
}
fonte
2016-04-01 14:05:46
si può provare a passare ad esso attraverso le maniglie delle finestre? –