driver.WindowHandles просто передают количество оконных дескрипторов, когда открыты два экземпляра Internet Explorer
Используя Selenium WebDriver, я пытаюсь сделать UI Automation, где я сталкиваюсь с этим сценарием:
Из InternetExplorer1 в моем веб-приложении, когда я щелкаю меню на вкладке, новый экземпляр InternetExplorer2 загружает URL-адрес. Итак, я получаю два IE. Теперь мне нужно переключиться на IE2 и нажать там кнопку выхода. для этого у меня есть код:
[Test]
public void mytest()
{
Assert.IsTrue(IsOpen());
}
public bool IsOpen()
{
GoToUrl();// I pass the URL over here and the element is clicked here
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15));
SwitchWindow();
return true;
}
//Here I switch the window.
private void SwitchWindow()
{
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
var currentWindow = driver.CurrentWindowHandle;
string currentWindowTitle = (string)js.ExecuteScript("return document.title");
var availableWindows = new List<string>(driver.WindowHandles);
foreach (string w in availableWindows)
{
if (w != currentWindow)
{
//This should switch the window.
driver.SwitchTo().Window(w);
//..........................
//.........More of my automation runs here..........
//...........................
}
}
}
Но список доступных окон просто пропускает один элемент в WindowHandles. Разве не должно считаться два, когда у меня открыты два экземпляра?
1 ответ
Если InternetExplorer2 запускается как новый экземпляр IE, а не как новая вкладка в том же экземпляре IE, я не думаю, что ваш InternetExplorerDriver может его увидеть.
Вы можете попробовать изменить настройки IE, чтобы все запускалось в новой вкладке, а не в новом экземпляре, или написать некоторый код, чтобы получить URL-адрес из нового экземпляра IE и перезапустить его с помощью нового InternetExplorerDriver (мне удалось это сделать успешно с C#, и это работало хорошо, но это может зависеть от того, как работает ваше веб-приложение).