Функция для alert_is_present () и switch_to_alert () - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть код (python / селен):

    # Alert start
    WebDriverWait(self.driver, 5).until(EC.alert_is_present())
    self.driver.switch_to_alert().dismiss()
    # Alert end

Первая строка ожидает предупреждения в браузере, а вторая - нажмите кнопку «Отмена», чтобы закрыть это окно. Работает нормально. Я решил создать 2 функции.

    def alertIsPresent(self, timeout=10):
        WebDriverWait(self.driver, timeout).until(EC.alert_is_present())

    def alertDismiss(self):
        alert = self.driver.switch_to_alert()
        alert.dismiss()

И я называю эту функцию:

    PageObject.alertIsPresent()
    PageObject.alertDismiss()

Последний знак ")" подчеркнут, потому что "параметр self unilled" ... Я самое новое в python, можете ли вы дать мне предложение?

pageObjectClass:

class PageObject:

def __init__(self, driver, xpathLocator):
    self.driver = driver
    self.locator = xpathLocator
    self.wait = WebDriverWait(self.driver, 100)

def waitElementToBePresent(self, timeout=10):
    WebDriverWait(self.driver, timeout).until(
        EC.visibility_of_element_located((By.XPATH, self.locator)))

def elementIsPresent(self):
    return EC.visibility_of_element_located((By.XPATH, self.locator))

def alertIsPresent(self, timeout=10):
    WebDriverWait(self.driver, timeout).until(EC.alert_is_present())

def alertDismiss(self):
    alert = self.driver.switch_to_alert()
    alert.dismiss()

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Нет необходимости использовать две функции, EC.alert_is_present() вернет предупреждение

def alertIsPresent(self, timeout=10):
    return WebDriverWait(self.driver, timeout).until(EC.alert_is_present())

Вы также должны вызывать его из экземпляра класса, а не типа

PageObject(driver).alertIsPresent().dismiss()
0 голосов
/ 05 февраля 2020

Вы не упомянули информацию о версии клиента Selenium .

Однако, согласно текущей реализации и документация :

switch_to

SwitchTo: an object containing all options to switch focus into

Usage: driver.switch_to.alert

Таким образом, вам необходимо заменить строку:

alert = self.driver.switch_to_alert()

на:

alert = self.driver.switch_to.alert
...