Подтвердить что ты не робот

Переключатели для переключателей Selenium ChromeDriver

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

Actions builder = new Actions(driver);
builder.KeyDown(Keys.Control).KeyDown(Keys.Tab).KeyUp(Keys.Tab).KeyUp(Keys.Control);//switch tabs
IAction switchTabs = builder.Build();
switchTabs.Perform();

Но это вызывает следующее исключение:

ekmLiveChat.tests.UITests.EndToEndTest.EndToEnd:
System.ArgumentException : key must be a modifier key (Keys.Shift, Keys.Control, or Keys.Alt)
Parameter name: key

Есть ли способ переключить вкладки с помощью ChromeDriver?

4b9b3361

Ответ 1

Как уже упоминалось в моем комментарии к вашему сообщению, я не уверен, что драйвер Chrome обрабатывает вкладки так же, как и обрабатывает окна.

Этот код работает в Firefox при открытии новых окон, поэтому, надеюсь, он будет работать и в вашем случае:

public void SwitchToWindow(Expression<Func<IWebDriver, bool>> predicateExp)
{
    var predicate = predicateExp.Compile();
    foreach (var handle in driver.WindowHandles)
    {
        driver.SwitchTo().Window(handle);
        if (predicate(driver))
        {
            return;
        }
    }

    throw new ArgumentException(string.Format("Unable to find window with condition: '{0}'", predicateExp.Body));
}

SwitchToWindow(driver => driver.Title == "Title of your new tab");

(Надеюсь, мои изменения кода для этого ответа не ввели никаких ошибок...)

Просто убедитесь, что вы не начинаете искать новую вкладку, прежде чем Chrome сможет открыть ее:)

Ответ 2

Это то, что сработало для меня:

var popup = driver.WindowHandles[1]; // handler for the new tab
Assert.IsTrue(!string.IsNullOrEmpty(popup)); // tab was opened
Assert.AreEqual(driver.SwitchTo().Window(popup).Url, "http://blah"); // url is OK  
driver.SwitchTo().Window(driver.WindowHandles[1]).Close(); // close the tab
driver.SwitchTo().Window(driver.WindowHandles[0]); // get back to the main window

Ответ 3

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

//Rotate Tabs
seleniumDriver.SwitchTo().Window(seleniumDriver.WindowHandles[currentUrlIndex]);
IJavaScriptExecutor jscript = seleniumDriver as IJavaScriptExecutor;
jscript.ExecuteScript("alert('Focus')");
seleniumDriver.SwitchTo().Alert().Accept();

Ответ 4

В С# я использовал следующие строки для переключения между двумя вкладками.

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;   
js.ExecuteScript("window.open();");   
IList<string> tabs = new List<string>(driver.WindowHandles);    
driver.SwitchTo().Window(tabs[1]);
driver.Navigate().GoToUrl("http://www.google.com");