Webdriverを使用して、最初のタブ/メインタブ以外の開いているすべてのタブを閉じる方法を誰かに教えてもらえますか?
以下を試しましたが、最初のタブも含めてすべてのタブが閉じています。
public static void closeTabs() {
String wh1=driver.getWindowHandle();
String cwh=null;
while(wh1!=cwh)
{
new Actions(driver).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1).perform();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL, Keys.TAB);
cwh=driver.getWindowHandle();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL+"w");
}
}
私を助けてください。
すべてのウィンドウハンドルを取得して反復処理し、webdriverを新しいハンドルに切り替えてから、closeメソッドを呼び出します。元のハンドルの場合は明らかにこれをスキップしてから、残りのハンドルに切り替えます。
何かのようなもの;
String originalHandle = driver.getWindowHandle();
//Do something to open new tabs
for(String handle : driver.getWindowHandles()) {
if (!handle.equals(originalHandle)) {
driver.switchTo().window(handle);
driver.close();
}
}
driver.switchTo().window(originalHandle);
機能するはずの次のコードを試してください。
for(String winHandle : driver.getWindowHandles())
{
if (winHandle == driver.getWindowHandles().toArray()[driver.getWindowHandles().size()-1])
{
continue;
}
driver.switchTo().window(winHandle);
driver.close();
}
メインウィンドウ以外のすべてのウィンドウを閉じるには、次のようにしました。
// Find out which handle is the one of the main window
String mainWindow = driver.CurrentWindowHandle;
// Get a list of all windows, except the main window
driver.WindowHandles.Where(w => w != mainWindow).ToList()
// For each window found
.ForEach(w =>
{
// switch to the window
driver.SwitchTo().Window(w);
// close the window
driver.Close();
});
// At the end, come back to the main window
driver.SwitchTo().Window(mainWindow);
これを試して:
for(int i = driver.getWindowHandles().size() -1 ; i > 0 ; i--){
String winHandle = driver.getWindowHandles().toArray()[i].toString();
driver.switchTo().window(winHandle);
driver.close();
}
以下に示すように、必要なウィンドウに切り替えるユーティリティメソッドがあります
public class Utility
{
public static WebDriver getHandleToWindow(String title){
//parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
WebDriver popup = null;
Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
System.err.println("No of windows : " + windowIterator.size());
for (String s : windowIterator) {
String windowHandle = s;
popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
System.out.println("Window Title : " + popup.getTitle());
System.out.println("Window Url : " + popup.getCurrentUrl());
if (popup.getTitle().equals(title) ){
System.out.println("Selected Window Title : " + popup.getTitle());
return popup;
}
}
System.out.println("Window Title :" + popup.getTitle());
System.out.println();
return popup;
}
}
ウィンドウのタイトルがパラメーターとして渡されると、目的のウィンドウに移動します。あなたの場合あなたはそうすることができます。
Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");
childDriver.close();
同じ方法を使用して親ウィンドウに再度切り替えます
Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");
この方法は、複数のウィンドウを扱うときに効果的に機能します。