Переключение вкладок с помощью Selenium WebDriver на Java
Использование Selenium WebDriver с Java. Я пытаюсь автоматизировать функциональность, при которой я должен открыть новую вкладку, выполнить там некоторые операции и вернуться к предыдущей вкладке (родительской). Я использовал дескриптор переключения, но он не работает. И одна странная вещь: у двух вкладок одинаковый дескриптор окна, из-за чего я не могу переключаться между вкладками.
Однако, когда я пытаюсь с другими окнами Firefox, это работает, но для tab это не работает.
Как я могу переключать вкладки? Или, как я могу переключать вкладки без использования дескриптора окна, поскольку дескриптор окна одинаков для обеих вкладок в моем случае?
(Я заметил, что когда вы открываете разные вкладки в одном окне, дескриптор окна остается неизменным)
У меня этот код отлично сработал. Попробуйте. Вам всегда нужно переключать драйвер на новую вкладку, прежде чем вы захотите что-то сделать на новой вкладке.
Ответ 2
Это простое решение для открытия новой вкладки, изменения фокуса на нее, закрытия вкладки и возврата фокуса на старую / исходную вкладку:
// considering that there is only one tab opened in that point. StringoldTab= driver.getWindowHandle(); driver.findElement(By.linkText("Twitter Advertising Blog")).click(); ArrayList<String> newTab = newArrayList<String>(driver.getWindowHandles()); newTab.remove(oldTab); // change focus to new tab driver.switchTo().window(newTab.get(0)); assertAdvertisingBlog();
// Do what you want here, you are in the new tab
driver.close(); // change focus back to old tab driver.switchTo().window(oldTab); assertStartAdvertising();
// Do what you want here, you are in the old tab }
privatevoidassertStartAdvertising() { assertEquals("Start Advertising | Twitter for Business", driver.getTitle()); }
Существует разница в том, как Web driver обрабатывает разные окна и как он обрабатывает разные вкладки.
Пример 1: В случае наличия нескольких окон может помочь следующий код:
//Get the current window handle StringwindowHandle= driver.getWindowHandle();
//Get the list of window handles ArrayListtabs=newArrayList (driver.getWindowHandles()); System.out.println(tabs.size()); //Use the list of window handles to switch between windows driver.switchTo().window(tabs.get(0));
//Switch back to original window driver.switchTo().window(mainWindowHandle);
Пример 2: Если в одном окне несколько вкладок, то имеется только один дескриптор окна. Следовательно, при переключении между дескрипторами окна элемент управления остается на одной вкладке. В этом случае более полезно использовать Ctrl + \ t (Ctrl + Tab) для переключения между вкладками.
//Open a new tab using Ctrl + t driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); //Switch between tabs using Ctrl + \t driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");