WindowHandles не работает на IE: не переключается на новую вкладку - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно открыть ссылку в новой вкладке и вернуться к исходной вкладке; однако кажется, что WindowHandle не работает должным образом. Приведенный ниже код открывает только новую вкладку, а затем загружает ссылку в исходной вкладке, не переключаясь на нее.

driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.Navigate().GoToUrl("https://bi7-azure.accenture.com/");
driver.SwitchTo().Window(driver.WindowHandles.First()); 

enter image description here

Как вариант, я прочитал что есть новая функция, которая делает это намного проще и проще, но она работает не так хорошо (мне не хватает зависимости или чего-то в этом роде), и я не вижу много статей об этом. Было бы здорово, если бы я мог использовать это вместо этого, или если нет, то как я могу преодолеть проблему с WindowHandles. Также обратите внимание, что я уже правильно настроил IE и добавил необходимые изменения реестра, как указано в большинстве форумов на inte rnet.

driver.SwitchTo().newWindow(WindowType.TAB);

Я знаю, что для этого есть дублирующие вопросы, но большинство из них старые, поэтому, пожалуйста, потерпите меня.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Возможно, вам придется дождаться загрузки окна, прежде чем переключаться на это окно. Вот метод расширения, который сделает это:

public static SwitchToWindow(this IWebDriver @this, string windowTitle)
    {
        var tryCount = 0;
        while (!@this.WindowHandles.Any(x => @this.SwitchTo().Window(x).Title.StartsWith(windowTitle)))
        {
            Thread.Sleep(500);
            if (tryCount == 60)
                throw new NoSuchWindowException($"No window with title {windowTitle} found.");
            tryCount=+1;
        }
        @this.Manage().Window.Maximize();
    }
0 голосов
/ 29 апреля 2020

Попробуйте это ..

          public static string SwitchToTab()
    {
        var mainHandle = driver.CurrentWindowHandle;
        var handles = driver.WindowHandles;

        foreach (var handle in handles)
        {
            if (mainHandle == handle)
            {
                continue;
            }
            driver.SwitchTo().Window(handle);
            break;
        }
        var result = Url;
        return result;
    }

Тогда ...

        public static void GoToMainHandle()
    {
        var handles = driver.WindowHandles;
        foreach (var handle in handles)
        {
            driver.SwitchTo().Window(handle);
            break;
        }
    }

Вы также можете использовать:

        public static void CloseTab()
    {
        var mainHandle = driver.CurrentWindowHandle;
        var handles = driver.WindowHandles;
        foreach (var handle in handles)
        {
            if (mainHandle == handle)
            {
                continue;
            }
            driver.SwitchTo().Window(handle);
            driver.Close();
            driver.SwitchTo().Window(mainHandle);
            break;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...