t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenide не запускается -Webdriver has been closed. You need to call open(url) to open a browser again.

selenidelement
webdriver
selenide
selenium
Теги: #<Tag:0x00007f21dc8209d8> #<Tag:0x00007f21dc820870> #<Tag:0x00007f21dc8204d8> #<Tag:0x00007f21dc8202f8>

(Elvis Presley ) #1

Всем привет. Пытаюсь инициализировать selenide с поощью spring. При втором запуске браузера бросается исключение java.lang.IllegalStateException: Webdriver has been closed. You need to call open(url) to open a browser again.

@Configuration
class SelenideConfig(private val properties: Properties) {

    @Bean
    fun selenide(): Selenide {
        baseUrl = properties.baseUrl
        startMaximized = true
        reportsFolder = "test-result/reports"
        System.setProperty("chromeoptions.args", properties.chromeArgs)
        return Selenide()
    }
}
@Component
class SignInPage {
    val inputPhoneNumber = `$`(xpath("//input[@id='mat-input-0']"))
    val buttonSubmit = `$`(xpath("//span[contains(text(), \"ОТПРАВИТЬ\")]"))
    val inputConfirmationCode = `$`(xpath("//input[@id='mat-input-1']"))
}
@Component
class RegistrationSteps(
        private val signInPage: SignInPage
) {

    fun confirmPhoneNumber(phoneNumber: String) {
        signInPage.inputPhoneNumber.value = phoneNumber
    }

class RegistrationSpec(
        private val registrationSteps: RegistrationSteps
) : SpringStringSpec({


    "test1" {
        registrationSteps.confirmPhoneNumber(PHONE_NUMBER)
    }

    "test2" {
        registrationSteps.confirmPhoneNumber(PHONE_NUMBER)
    }

}) {
    override fun beforeTest(description: Description) {
        Selenide.open("/")

    }

    override fun afterTest(description: Description, result: TestResult) {
        Selenide.close()

    }
}

Первый тест проходит, запускается второй тест, открывается браузер на нужной странице и бросается исключение ** java.lang.IllegalStateException: Webdriver has been closed. You need to call open(url) to open a browser again.**. Что я делаю не так?


(Elvis Presley ) #2

Не понимаю как создавать и тушить этот SelenideDriver после каждого теста? постоянно выскакивает этот эксепшн.
В selenium wd.get(url) и wd.quit а тут непонятно.
Хелп!


(asolntsev) #3

Охренеть как вы всё переусложнили. Спринг, @Configuration, @Component, SpringStringSpec - всё это нахрен не нужно в тестах. Будьте проще. Гораздо проще. Сами же в своём коде разобраться не можете.

Проблема в том, что объекты RegistrationSteps, SignInPage и т.д. вы создаёте только один раз, и они запоминают свой вебдрайвер. А вы его закрываете после каждого теста. А они вам так и говорят чёрным по белому: “Webdriver has been closed”. Это переводится “тот вебдрайвер, с которым ты нас создал, почему-то закрылся”.

Рецепт простой: не надо создавать все эти объекты спрингом. Создавайте их просто руками вначале каждого теста. Ну или сконфигурируйте спринг так, чтобы он их создавал заново в каждом тесте.


(Elvis Presley ) #4

Проблема оказалось в том, что надо возвращать не Selenide, а WebDriverRunner.getSelenideDriver()