2013-08-09 7 views
13

Я работаю с Selenium, и мне интересно, можно ли сразу использовать несколько TABS? Я не хочу использовать несколько экземпляров браузера (т. Е. 2 ​​копии IE pun). ЕСЛИ ЭТО НЕВОЗМОЖНО, как бы перейти к переключению между отдельными вкладками, которые выполняются последовательно?Selenium несколько вкладок сразу

Спасибо!

ответ

20

Если есть ссылка, которая открывает окно/вкладку новое, то вы можете использовать driver.switchTo().window();

Однако, если вы хотите запустить что-то на несколько окон, то я рекомендую иметь несколько экземпляров WebDriver. Это намного проще в управлении и поддерживается (есть обходные пути при открытии новой вкладки/окна, например, нажатие горячей клавиши, которая открывает новое окно, но они не поддерживаются).

Если вы хотите иметь несколько потоков, все действуют на один экземпляр драйвера, но разные вкладки, что НЕ возможно.

+0

Замечательного ответом. У меня есть второй вопрос. С IE, как я могу переключиться на новую вкладку? Я использую C#. driver.switchTo(). window() запрашивает строку. Спасибо –

+0

Вы должны получить ручки окна, используя driver.getWindowHandles(). Затем вы можете перебирать окна и проверять URL-адрес или заголовок, чтобы убедиться, что он тот, который вы хотите. –

+0

Я думаю, мне нужно немного больше примера. Я использую C#. Я думаю, что может быть java .. –

7

Можно переключаться между отдельными вкладками без наличия нескольких экземпляров браузера.
Существует разница в том, как веб-драйвер обрабатывает разные окна и как он обрабатывает разные вкладки.

Случай 1:
В случае, если есть несколько окон, то следующий код может помочь:

//Get the current window handle 
String windowHandle = driver.getWindowHandle(); 

//Get the list of window handles 
ArrayList tabs = new ArrayList (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"); 

Подробный пример кода можно найти здесь:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

+0

Действительно полезный комментарий и работал для меня, особенно в случае работы с несколькими вкладками. – SelenyanC2

0

, если желают, чтобы запустить несколько окон одновременно, использовать резьб с несколькими экземплярами IWebDriver

EX:

public void Work() 
{ 
IWebDriver driver = new ChromeDriver("D:\\Drivers"); 
driver.Navigate().GoToUrl(URL); 
\\Do the rest 
} 
public void Work2() 
{ 
IWebDriver driver = new ChromeDriver("D:\\Drivers"); 
driver.Navigate().GoToUrl(URL2); 
\\Do the rest 
} 

и вызывайте функцию следующим образом:

Thread thread1 = new Thread(new ThreadStart(Work)); 
thread1.Start(); 
Thread thread2 = new Thread(new ThreadStart(Work2)); 
thread2.Start(); 
1

Чтобы открыть несколько вкладок:

driver = new ChromeDriver(); 
IJavaScriptExecutor jscript = driver as IJavaScriptExecutor; 
for (int i = 0; i < 10; i++) 
{     
    driver.Navigate().GoToUrl(this.baseURL);  
    jscript.ExecuteScript("window.open('{0}', '_blank');", this.baseURL); 
} 

включателя между ними:

for (int i = 0; i < driver.WindowHandles.Count; i++) 
{ 
    driver.SwitchTo().Window(driver.WindowHandles[i])]); 
} 
Смежные вопросы