Функция для "попробуй ... кроме ..." - PullRequest
0 голосов
/ 09 марта 2020

Я хочу добавить в функцию «попробуй ... кроме ...», чтобы мой код был короче, потому что он используется несколько раз.

Сделай так:

def whiletry(x):
    while 1:
        try:
            x
            break
        except:
            time.sleep(0.25)

whiletry(driver.find_element_by_xpath('//*[@id="j_list_card"]/ul/li/h3/a').click())

Ответы [ 3 ]

6 голосов
/ 09 марта 2020
def whiletry(func):
    while 1:
        try:
            return func()
        except:
            time.sleep(0.25)

def click():
    driver.find_element_by_xpath('//*[@id="j_list_card"]/ul/li/h3/a').click()

whiletry(click)

Использование также может быть эквивалентно записано как:

whiletry(lambda: driver.find_element_by_xpath('//*[@id="j_list_card"]/ul/li/h3/a').click())

Обратите внимание на lambda.

3 голосов
/ 09 марта 2020

Если вы тестируете с Selenium и хотите подождать, пока что-то появится на веб-странице, ждет может помочь вам.

По моему опыту пользовательские try-excepts и бесконечные петли в Selenium могут привести к проблемам с обслуживанием. Стандартное ожидание Selenium будет выглядеть так:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as expected

wait = WebDriverWait(driver, 10)
element = wait.until(expected.presence_of_element_located((By.XPATH, '//*[@id="j_list_card"]/ul/li/h3/a')))
element.click()
0 голосов
/ 09 марта 2020

Я думаю, это должно работать для вашего варианта использования:

def do_this():
    driver.find_element_by_xpath('//*[@id="j_list_card"]/ul/li/h3/a').click()

try:
    do_this()
except:
    time.sleep(0.25)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...