playwright-python icon indicating copy to clipboard operation
playwright-python copied to clipboard

[Feature]: support passing `timedelta` objects to functions that take a `timeout` argument

Open DetachHead opened this issue 1 year ago • 3 comments

🚀 Feature Request

it would be nice if playwright allowed you to pass a datetime.timedelta object to functions that take timeouts, as it more clearly describes the unit of time being used.

Example

from datetime import timedelta

page.click("div", timeout=timedelta(minutes=5))

Motivation

preventing mistakes

currently, it's easy to accidentally misuse the timeout argument for example if the user incorrectly assumes it refers to seconds instead of milliseconds:

from time import sleep

time.sleep(5) # waits 5 seconds
page.wait_for_timeout(5) # waits 5 milliseconds

(yes i know you should never use time.sleep with playwright. this example is just to illustrate that there are builtin functions that take seconds instead of milliseconds, which makes it more likely that a user could incorrectly assume that playwright does the same)

improving readability

it can also make code that waits for longer amounts of time look cleaner. currently you're forced to either write the literal number of milliseconds which is often difficult to read, or split it up into factors representing each unit:

page.click("div", timeout=300000)
page.click("div", timeout=5 * 60 * 1000)

both of these are less reradable than using a timedelta:

page.click("div", timeout=timedelta(minutes=5))

DetachHead avatar Oct 21 '24 03:10 DetachHead

Is it still relevant? I would like to contribute with this feature :)

thalissonvs avatar Jun 21 '25 14:06 thalissonvs

yeah it is

DetachHead avatar Jun 22 '25 03:06 DetachHead

@mxschmitt May I work on this issue? I'd like to know a bit more about the scope of this change. I have some ideas I'd like to share

thalissonvs avatar Jun 27 '25 00:06 thalissonvs