2013-08-09 20 views
13

Seleniumと一緒に作業していますが、同時に複数のTABSを使用することが可能かどうか疑問に思っていますか?私は複数のブラウザインスタンス(IEの2つのコピーを使用する)を使用したくない。それが不可能な場合、順次実行されている個々のタブを切り替えるにはどうすればよいでしょうか?複数のタブが同時に表示される

ありがとうございます!

答えて

20

新しいウィンドウ/タブを開くリンクがある場合、あなたは複数のウィンドウ上で何かを実行したい場合は、その後、私はwebdriverをの複数のインスタンスを持つお勧めします、しかしdriver.switchTo().window();

を使用することができます。管理がはるかに簡単で、サポートされています(新しいウィンドウを開くホットキーを押すなどの新しいタブ/ウィンドウを開く際の回避策がありますが、サポートされていません)。

複数のスレッドをすべて同じドライバインスタンスで動作させたいが、異なるタブを使用したい場合は不可能です。

+0

素晴らしい答えを。私は2番目の質問があります。 IEでは、どうすれば新しいタブに切り替えることができますか?私はC#を使用しています。 driver.switchTo()。window()は文字列を要求します。 Thanks –

+0

driver.getWindowHandles()を使用してウィンドウハンドルを取得する必要があります。その後、ウィンドウを繰り返し、URLまたはタイトルをテストして、必要なものを確認することができます。 –

+0

私はもう少し具体例が必要だと思います。私はC#を使用しています。私はそれがJavaかもしれないと思う.. –

7

複数のブラウザインスタンスを使用せずに個々のタブを切り替えることは可能です。
Webドライバが異なるウィンドウを処理する方法と、異なるタブをどのように処理するかに違いがあります。

ケース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:
場合には、同じウィンドウ内に複数のタブが存在します、ウィンドウハンドルは1つしかありません。したがって、ウィンドウハンドルを切り替えると、同じタブにコントロールが保持されます。
この場合、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); 
} 

Swich:

for (int i = 0; i < driver.WindowHandles.Count; i++) 
{ 
    driver.SwitchTo().Window(driver.WindowHandles[i])]); 
} 
関連する問題