How to set Selenium Python WebDriver default timeout?
Trying to find a good way to set a maximum time limit for command execution latency in Selenium Python WebDriver. Ideally, something like:
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
would work. I have found .implicitly_wait(30)
, but I'm not sure if it results in the desired behavior.
In case it is useful, we are specifically using the WebDriver for Firefox.
EDIT
As per @amey's answer, this might be useful:
ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")
However, it is not clear to me whether the implicit wait applies both to get
(which is the desired functionality) and to find_element_by_id
.
Thanks very much!
In python, the method to create a timeout for a page to load is:
Firefox and Chromedriver:
driver.set_page_load_timeout(30)
Other::
driver.implicitly_wait(30)
This will throw a TimeoutException
whenever the page load takes more than 30 seconds.
The best way is to set preference:
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/")
Information about Explicit and Implicit waits can be found here.
UPDATE
In java I see this, based of this :
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.
Not sure of the python equivalent.