Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как можно открыть новое окно браузера при каждой итераций?

python
selenium
webdriver
Теги: #<Tag:0x00007f7b622a3ea8> #<Tag:0x00007f7b622a3c50> #<Tag:0x00007f7b622a3a20>

#1

Привет,
Как я могу открывать новое окно браузера при каждой итераций, я пробовал это сделать со следующим кодом:

class GoogleTest(unittest.TestCase):

    def setUp(self):
        self.browser = webdriver.Chrome('/home/andrey/Downloads/chromedriver')
        self.wait = WebDriverWait(self.browser, 20)
        self.browser.implicitly_wait(30)

    def test_01_goole(self):
        for i in range(3):
            browser = self.browser
            browser.get('http://www.google.com')
            browser.close()
            

К сожалению я получаю ошибку:

WebDriverException: Message: no such session

(Ray Romanov) #2

работает только перед каждым тестом в сьюте!!!


#3

ok какое решение предложишь? Кроме того что я могу засунуть сам browser в цикл… попробовать setUpClass?


(Ray Romanov) #4

Выполняется один раз перед выполнением всего сьюта, изучаем матчасть уважаемый!
Если хочешь закрывать и открывать в цикле, то делай это все в цикле!!!


#5

Значит каждый тест ты хочешь сказать что я должен в цикле указывать браузер???


(Ray Romanov) #6

Естественно, после close() уничтожается сессия, ты ее должен создать по новой!!!


(Oleksandr Khotemskyi) #7

В первой же итерации цикла ты убиваешь браузер, дальше объект browser уже не прикреплен ни к какой сессии браузера, и ты ловишь ошибку.

Решение - не делай browser.close() в тесте, делай после теста в tearDown()


#8

Попытался не идет…:

class GoogleTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.browser = webdriver.Chrome('/home/andrey/Downloads/chromedriver')
        cls.wait = WebDriverWait(cls.browser, 20)
        cls.browser.implicitly_wait(30)

    def test_01_google(self):
        for i in range(3):
            browser = self.browser
            browser.get('http://www.google.com')

    def tearDown(self):
        self.browser.close()

(rmerkushin) #9

Естественно оно так не будет работать. Ты в цикле обращаешься к одному из тому же экземпляру класса драйвера. Тебе в цикле нужно создавать новый экземпляр класса при каждой итерации.

Еще как костыль можно через JS создавать новое окно и на него переключаться драйвером)


(Anton Serputko) #10

А зачем тебе открывать браузер несколько раз для одного теста?
Перенеси инициализацию драйвера из setUp в начало цикла

for i in range(3):
            self.browser = webdriver.Chrome('/home/andrey/Downloads/chromedriver')
            browser = self.browser
            browser.get('http://www.google.com')
            browser.close()