Як зачыніць акно браўзэра дзіцяці ў Selenium WebDriver з дапамогай Java

Тут я атрымліваю некаторыя праблемы з доўгага часу. І я не мог зразумець, што, можа хто-небудзь хоча мне дапамагчы? ... калі я іду, каб пераключыць новае акно, пасля завяршэння заданні новых вокнаў. Я хачу, каб закрыць, што новыя window.and перамыкача старога акна,

так што тут я напісаў, як код:

// Perform the click operation that opens new window

String winHandleBefore = driver.getWindowHandle();

   //Switch to new window opened

    for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle);
    }

   //Perform the actions on new window


    driver.findElement(By.id("edit-name")).clear();
    WebElement userName = driver.findElement(By.id("edit-name"));
    userName.clear();
              try
    {
        driver.quit();
    }

    catch(Exception e)
    {
        e.printStackTrace();
        System.out.println("not close");
                }

driver.switchTo().window(winHandleBefore);// Again I want to start code this old window

Вышэй я кода driver.quit() або driver.close() . Але я атрымліваю паведамленне пра памылку. Можа хто-небудзь дапамагчы мне ...?

<�Р> org.openqa.selenium.remote.SessionNotFoundException :. FirefoxDriver не можа быць выкарыстаны пасля таго, як кінуць паліць() быў выкліканы </р>
28

7 адказы

Каб закрыць адно акно браўзэра:

driver.close();

Для таго, каб закрыць усе (+ дзіця з бацькоў) вокны браўзэра і завяршэння ўсёй сесіі:

driver.quit();
51
дададзена
Нічога сабе! Гэта трук я не ведаю
дададзена аўтар Pei, крыніца

Логіка вы выкарыстоўвалі для пераключэння кіравання на ўсплывальнае акно няправільна

 for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle);
    }

Як вышэй логіка Swtich кіравання ў новае акно?


Выкарыстоўвайце ніжэй логікі для пераключэння кіравання ў новым акне

// get all the window handles before the popup window appears
 Set beforePopup = driver.getWindowHandles();

// click the link which creates the popup window
driver.findElement(by).click();

// get all the window handles after the popup window appears
Set afterPopup = driver.getWindowHandles();

// remove all the handles from before the popup window appears
afterPopup.removeAll(beforePopup);

// there should be only one window handle left
if(afterPopup.size() == 1) {
          driver.switchTo().window((String)afterPopup.toArray()[0]);
 }

<�Моцны> //Выканаць дзеянні на новым акне

  **`//Close the new window`** 
    driver.close();

<�Моцны> //Выконваем застаюцца аперацыі ў галоўным акне

   //close entire webDriver session
    driver.quit();
4
дададзена
//store instance of main window first using below code
String winHandleBefore = driver.getWindowHandle(); 

Выканайце аперацыю пстрычкі, якая адкрывае новае акно

//Switch to new window opened
for (String winHandle : driver.getWindowHandles()) {
    driver.switchTo().window(winHandle);
}

// Perform the actions on new window
driver.close(); //this will close new opened window

//switch back to main window using this code
driver.switchTo().window(winHandleBefore);

// perform operation then close and quit
driver.close();
driver.quit();
3
дададзена

Ёсць 2 спосабу, каб закрыць адзінае даччынае акно:

<�Моцны> Шлях 1:

driver.close();

Way 2: By using Ctrl+w keys from keyboard:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "w");
0
дададзена
driver.close (); дастасавальна для новага акна. . Driver.findElement (By.cssSelector ( "цела")) SendKeys (Keys.CON & ZWNJ; TROL + "ш"); выкарыстоўваецца і ў дачыненні як для новага акна і новай укладкі.
дададзена аўтар Ripon Al Wasim, крыніца

Ёсць некаторыя выпадкі, калі акно зачыніцца сама пасля таго, як сапраўдны дэскрыптар вокны, была атрымана з getWindowHandle() або getWindowHandles ().

Існуе нават магчымасць таго, што акно будзе закрыты, а сам getWindowHandles() працуе, калі вы не стварыць некаторы крытычны тып часткі кода (г.зн. замарозіць браўзэр падчас выканання тэставага кода, пакуль усе аперацыі кіравання вокнамі не завершаныя)

Больш хуткі спосаб праверыць правільнасць бягучага драйвера, каб праверыць SESSIONID, які абнуляецца па driver.close() ці вокны закрыцця сябе.

WebDriver павінен быць прыведзены да інтэрфейсу аддаленага драйвера (RemoteWebDriver) для таго, каб атрымаць SESSIONID, наступным чынам:

if (null == ((RemoteWebDriver)driver).sessionId) {
   //current window is closed, switch to another or quit
} else {
   //current window is open, send commands or close
}

Таксама зьвярніце ўвагу, што закрыццё апошняга вокны эквівалентна кінуць ().

0
дададзена
public class First {
    public static void main(String[] args) {
        System.out.println("Welcome to Selenium");
        WebDriver wd= new FirefoxDriver();
        wd.manage().window().maximize();
        wd.get("http://opensource.demo.orangehrmlive.com/");
        wd.findElement(By.id("txtUsername")).sendKeys("Admin");
        wd.findElement(By.id("txtPassword")).sendKeys("admin");
        wd.findElement(By.id("btnLogin")).submit();
        **wd.quit(); //--> this helps to close the web window automatically** 
        System.out.println("Tested Sucessfully ");
    }
}
0
дададзена

Я таксама паспрабаваў

1) driver.close ();
2) driver.quit ();

па-відаць, гэтыя метады не працуюць, як і чакалася! (не кажучы, што гэта не працуе, хоць) я нават паспрабаваў зрабіць клас драйвера адзіночкі і гэта не дапамагло мне з запускам тэставых parallel.so гэта таксама ня аптымальная solution.finally, я прыдумаў стварыць асобны клас для запуску бітай file.which файла лятучага ўтрымлівае каманды групавання ўсяго працэсу драйвера хрому і ўсе даччыныя працэсы it.And з класа Java я напоўніў яго з дапамогай працягласць.

<�Моцны> Клас файл, які запускае файл лятучай мышы

public class KillChromeDrivers {

    public static void main(String args[]) {


        try {

            Runtime.getRuntime().exec("cmd /c start E:\\Work_Folder\\SelTools\\KillDrivers.bat");
            //Runtime.getRuntime().exec()
        } catch (Exception ex) {



        }
    }

}

<�Моцны> Каманда, вы павінны пакласці ў [.bat] файл

taskkill /IM "chromedriver.exe" /T /F
0
дададзена