Driver.title не работает в селен вебдрайвер с питоном - PullRequest
0 голосов
/ 19 ноября 2018

Есть кнопка, которая при нажатии переходит на страницу входа в Facebook, и я хочу подтвердить, что она правильно перемещается с помощью selenium.Однако при нажатии кнопки логин Facebook открывается в новой вкладке, но driver.title возвращает заголовок предыдущей вкладки (где кнопка присутствует).

def test_01_facebook(self):
        self.driver.find_element_by_xpath("//i[@class='fa fa-facebook-square']").click()
        title = self.driver.title
        self.assertTrue("Facebook" == self.driver.title) 
        print (title)

В качестве альтернативы я мог бы сравнить URL, используя driver.current_urlно проблема в том, что в URL новой вкладки есть длинная строка после https://www.facebook.com/login.php?.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

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

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

def test_01_facebook(self):
    self.driver.find_element_by_xpath("//i[@class='fa fa-facebook-square']").click()
    current = self.driver.current_window_handle
    wait(self.driver, 10).until(EC.new_window_is_opened(self.driver.window_handles))
    self.driver.switch_to.window([w for w in self.driver.window_handles if w != current][0])
    title = self.driver.title
    self.assertTrue("Facebook" == self.driver.title) 
    print (title)

Вы также можете переключиться обратно в главное окно, используя

self.driver.switch_to.window(current)
0 голосов
/ 19 ноября 2018

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

 self.driver.find_element_by_xpath("//i[@class='fa fa-facebook-square']").click()
 windowHandle = self.driver.window_handles
 for windowId in self.driver.window_handles:
      if not windowId==windowHandle
          self.driver.switch_to.window(windowId);

 title = self.driver.title
 self.assertTrue("Facebook" == self.driver.title) 
 print (title)
0 голосов
/ 19 ноября 2018

Чтобы извлечь Заголовок страницы из недавно открытого TAB , т. Е. Facebook - войдите или зарегистрируйтесь , вам необходимо:

  • Переключите фокус на вновь открытый TAB , вызывающий WebDriverWait
  • Вам нужно снова вызвать WebDriverWait для Заголовка страницы для рендеринга.
  • Вы можете использовать следующее решение:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    def test_01_facebook(self):
        windows_before  = driver.current_window_handle
        self.driver.find_element_by_xpath("//i[@class='fa fa-facebook-square']").click()
        WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
        windows_after = driver.window_handles
        new_window = [x for x in windows_after if x != windows_before][0]
        driver.switch_to_window(new_window)
        WebDriverWait(driver, 10).until(EC.title_contains("log in"))
        self.assert "Python" in driver.title
        print (title)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...