Как может веб-драйвер Selenium узнать, когда новое окно открылось, а затем возобновить его execute

Я столкнулся с проблемой автоматизации веб-приложения с помощью веб-драйвера selenium.

На веб-странице есть кнопка, при нажатии на которую открывается новое окно. Когда я использую следующий код, он выдает OpenQA.Selenium.NoSuchWindowException: Окно не найдено

WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();

Чтобы решить указанную выше проблему, я добавляю Thread.Sleep (50000); между нажатием кнопки и SwitchTo операторы.

WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
Thread.Sleep(50000); //wait
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();

Это решило проблему, но я не хочу использовать оператор Thread.Sleep (50000); , потому что если для открытия окна требуется больше времени, код может завершиться ошибкой, а если окно открывается быстро, то оно излишне замедляет тест.

Есть ли способ узнать, когда окно открылось, и затем тест может возобновить свое выполнение?

27
задан Thomasleveil 28 June 2015 в 08:17
поделиться

1 ответ

Я наконец-то нашел ответ, я использовал приведенный ниже метод для переключения в новое окно,

public String switchwindow(String object, String data){
        try {

        String winHandleBefore = driver.getWindowHandle();

        for(String winHandle : driver.getWindowHandles()){
            driver.switchTo().window(winHandle);
        }
        }catch(Exception e){
        return Constants.KEYWORD_FAIL+ "Unable to Switch Window" + e.getMessage();
        }
        return Constants.KEYWORD_PASS;
        }

Чтобы перейти к родительскому окну, я использовал следующий код,

 public String switchwindowback(String object, String data){
            try {
                String winHandleBefore = driver.getWindowHandle();
                driver.close(); 
                //Switch back to original browser (first window)
                driver.switchTo().window(winHandleBefore);
                //continue with original browser (first window)
            }catch(Exception e){
            return Constants.KEYWORD_FAIL+ "Unable to Switch to main window" + e.getMessage();
            }
            return Constants.KEYWORD_PASS;
            }

Я думаю, это поможет вам переключаться между окнами.

1
ответ дан 28 November 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: