2017-12-01 11 views
0

セレニウムWebドライバ+ Internet Explorerを使用してポータルを自動化していますが、新たに開かれたタブにURLを渡すために、IEは新しいタブを認識せず、getWindowHandles()は1をcountとして返します。同じコードはChromeで正常に動作します。Selenium IEドライバは、同じウィンドウの複数のタブでgetWindowHandlesメソッドを使用しているときにタブ数を1に戻します。

サンプルコード1:

String baseUrl = "www.facebook.com"; 
driver.get(baseUrl); 
driver.findElement(By.xpath("//*[@id='userName']")).sendKeys("xyz"); 
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("****"); 
driver.findElement(By.xpath("//*[@id='loginButton']")).click(); 

driver.findElement(By.cssSelector("Body")).sendKeys(Keys.CONTROL +"t"); 
driver.getWindowHandles(); 
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); 

driver.switchTo().window(tabs.get(1)); //switches to new tab 
driver.get("www.google.com"); 

サンプルコード2:

String baseUrl = "www.facebook.com"; 
driver.get(baseUrl); 
driver.findElement(By.xpath("//*[@id='userName']")).sendKeys("xyz"); 
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("****"); 
driver.findElement(By.xpath("//*[@id='loginButton']")).click(); 

String parent = driver.getWindowHandle(); 
driver.findElement(By.cssSelector("Body")).sendKeys(Keys.CONTROL +"t"); 
Thread.sleep(3000); 
for(String winHandle : driver.getWindowHandles()){ 
    if(!winHandle.equals(parent)){ 
     driver.switchTo().window(winHandle); 
     driver.get("www.google.com"); 
    } 
} 

はまた、自動Cookie処理を上書き/プロテクトモードを変更するようにIEの設定を変更するいくつかの他の方法を試してみましたが、何も働いていません。

IEでコードを介して新しいタブを開き、Seleniumの任意のメソッドを使用して正確なタブ数を取得する方法はありますか?

構成:

IE:11、 セレン-javaの:2.47/3.7 IEDriver:3.3.0/2.53、 のWindows 7

+0

の可能性のある重複した[どのように新しいウィンドウが開き、その実行を再開したときに知ってもらうウェブドライバをセレンできる](https://stackoverflow.com/questions/9188343/how-can -selenium-web-driver-get-to-the-new-window-has-opened-and-then) – JeffC

+0

IEドライバは、新しいタブを開いた(つまり、 'Ctrl + t')。回避策はありません。 IEドライバでタブを使用しないでください。 – JimEvans

+0

@JimEvans:新しいタブを開いて既存の実行ウィンドウにURLを渡す必要がある場合、IEを使用する代わりに別のブラウザに切り替えてください - 唯一のオプションですか? – srinivas

答えて

0

私はIE8と同様の問題があったと私は解決driver.getWindowHandles()を呼び出す前に、driver.switchTo()。defaultContent()を使用してください。このような何か:

// Save the parent 
parent = driver.getWindowHandle(); 
driver.switchTo().defaultContent(); 
for (String winHandle : driver.getWindowHandles()) { 
     driver.switchTo().window(winHandle); 
     if (!winHandle.equals(parent)) { 
     // Do something 
     } 
} 
driver.close(); 
driver.switchTo().window(parent); 
+0

試しましたが、残念ながらdriver.getWindowHandles()メソッドはタブ数を読み込めず、まだ1を生成していますが、とにかくありがとうございます。 – srinivas

関連する問題