Как установить Selenium Python WebDriver тайм-аут по умолчанию?
попытка найти хороший способ установить максимальный срок задержки выполнения команды в Selenium Python WebDriver. В идеале, что-то вроде:
my_driver = get_my_driver()
my_driver.set_timeout(30) # seconds
my_driver.get('http://www.example.com') # stops / throws exception when time is over 30 seconds
будет работать. Я нашел .implicitly_wait(30)
, но я не уверен, если это приводит к желаемому поведению.
в случае, если это полезно, мы специально используем WebDriver для Firefox.
редактировать
согласно ответу @amey, это может быть полезно:
ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")
однако мне не ясно, относится ли неявное ожидание как к get
(что является желаемой функциональностью) и find_element_by_id
.
спасибо!
4 ответов
в python метод создания тайм-аута для загрузки страницы:
driver.set_page_load_timeout(30)
это бросит TimeoutException
когда загрузка страницы занимает более 30 секунд.
информация о явных и неявных ожиданиях может быть найдена здесь.
обновление
в java я вижу это, основываясь на этой :
WebDriver.Timeouts pageLoadTimeout(long time,
java.util.concurrent.TimeUnit unit)
Sets the amount of time to wait for a page load to complete before throwing an error. If the timeout is negative, page loads can be indefinite.
Parameters:
time - The timeout value.
unit - The unit of time.
Не уверен в эквиваленте python.
лучший способ-установить предпочтение:
fp = webdriver.FirefoxProfile()
fp.set_preference("http.response.timeout", 5)
fp.set_preference("dom.max_script_run_time", 5)
driver = webdriver.Firefox(firefox_profile=fp)
driver.get("http://www.google.com/")
мое решение состояло в том, чтобы запустить асинхронный поток рядом с событием загрузки браузера и закрыть браузер и повторно вызвать функцию загрузки, если был тайм-аут.
#Thread
def f():
loadStatus = true
print "f started"
time.sleep(90)
print "f finished"
if loadStatus is true:
print "timeout"
browser.close()
call()
#Function to load
def call():
try:
threading.Thread(target=f).start()
browser.get("http://website.com")
browser.delete_all_cookies()
loadStatus = false
except:
print "Connection Error"
browser.close()
call()
Call () - это функция, которая просто