2013-08-09 165 views
13

Tôi đang làm việc với Selenium và tôi tự hỏi liệu có thể sử dụng nhiều TABS cùng một lúc không? Tôi không muốn sử dụng nhiều phiên bản trình duyệt (tức là, 2 bản sao của trò chơi IE). NẾU KHÔNG THỂ, làm thế nào người ta có thể chuyển đổi giữa các tab riêng lẻ, đang chạy tuần tự?Selenium nhiều tab cùng một lúc

Cảm ơn!

Trả lời

20

Nếu có một liên kết mà mở ra một cửa sổ mới/tab, sau đó bạn có thể sử dụng driver.switchTo().window();

Tuy nhiên, nếu bạn muốn chạy một cái gì đó trên nhiều cửa sổ, sau đó tôi khuyên bạn nên có nhiều trường hợp của webdriver. Nó dễ quản lý hơn và được hỗ trợ (Có nhiều cách giải quyết khi mở một tab/cửa sổ mới, chẳng hạn như nhấn phím nóng mở một cửa sổ mới, nhưng chúng không được hỗ trợ).

Nếu bạn muốn có nhiều luồng tất cả hoạt động trên cùng một cá thể trình điều khiển, nhưng các tab khác nhau, KHÔNG thể thực hiện được.

+0

câu trả lời tuyệt vời. Tôi có một câu hỏi thứ hai. Với IE, làm cách nào để chuyển sang tab mới? Tôi đang sử dụng C#. window.switchTo(). window() yêu cầu một chuỗi. Cảm ơn –

+0

Bạn phải lấy các tay cầm cửa sổ bằng cách sử dụng driver.getWindowHandles(). Sau đó, bạn có thể lặp qua các cửa sổ và kiểm tra URL hoặc tiêu đề để đảm bảo URL hoặc tiêu đề bạn muốn. –

+0

Tôi nghĩ rằng tôi cần thêm một chút ví dụ. Tôi đang sử dụng C#. Tôi nghĩ rằng có thể là java .. –

7

Có thể chuyển đổi giữa các tab riêng lẻ mà không cần phải có nhiều phiên bản trình duyệt.
Có sự khác biệt về cách trình điều khiển web xử lý các cửa sổ khác nhau và cách xử lý các tab khác nhau.

Trường hợp 1:
Trong trường hợp có nhiều cửa sổ, sau đó mã sau đây có thể giúp:

//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); 


Trường hợp 2:
Trong trường hợp có nhiều tab trong cùng một cửa sổ , sau đó chỉ có một cửa sổ xử lý. Do đó việc chuyển đổi giữa các tay nắm cửa sổ sẽ giữ điều khiển trong cùng một tab.
Trong trường hợp này, sử dụng Ctrl + \ t (Ctrl + Tab) để chuyển đổi giữa các tab hữu ích hơn.

//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"); 

Chi tiết mẫu mã có thể được tìm thấy ở đây:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

+0

Bình luận thực sự hữu ích và làm việc cho tôi, đặc biệt là trong trường hợp làm việc với nhiều tab. – SelenyanC2

0

nếu bạn đang có nhu cầu chạy Windows Nhiều đồng thời, sử dụng luồng với nhiều trường hợp của 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 
} 

và gọi hàm như sau:

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

Để mở nhiều tab:

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); 
} 

swich giữa chúng:

for (int i = 0; i < driver.WindowHandles.Count; i++) 
{ 
    driver.SwitchTo().Window(driver.WindowHandles[i])]); 
}