Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions docs/examples/getting-started/first_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
# first_script.py
import json
import os
from pathlib import Path

from playwright.sync_api import sync_playwright
from widgetastic.browser import Browser
Expand Down Expand Up @@ -45,6 +46,10 @@ def main():
# Get headless mode from environment (set by conftest or CI)
headless = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"

# Use a local HTML form to avoid any external network dependency.
form_path = Path(__file__).parent / "pizza_form.html"
form_url = form_path.resolve().as_uri()

with sync_playwright() as playwright:
# Launch browser using Playwright
browser = playwright.chromium.launch(headless=headless)
Expand All @@ -54,8 +59,8 @@ def main():
# Create widgetastic browser instance
wt_browser = Browser(page)

# Navigate to the testing page.
wt_browser.url = "https://httpbin.org/forms/post"
# Navigate to the local pizza order form.
wt_browser.url = form_url

# Initialize the view i.e. Model of the testing page.
form_view = DemoFormView(wt_browser)
Expand Down
63 changes: 63 additions & 0 deletions docs/examples/getting-started/pizza_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Pizza Order Form</title>
</head>
<body id="page-body">
<form id="pizza-form" method="post">
<label for="custname">Customer name:</label>
<input type="text" id="custname" name="custname"><br>

<label for="custtel">Telephone:</label>
<input type="tel" id="custtel" name="custtel"><br>

<label for="custemail">E-mail address:</label>
<input type="email" id="custemail" name="custemail"><br>

<fieldset>
<legend>Pizza Size</legend>
<label><input type="radio" name="size" value="small"> Small</label>
<label><input type="radio" name="size" value="medium"> Medium</label>
<label><input type="radio" name="size" value="large"> Large</label>
</fieldset>

<fieldset>
<legend>Pizza Toppings</legend>
<label><input type="checkbox" name="topping" value="bacon"> Bacon</label>
<label><input type="checkbox" name="topping" value="cheese"> Extra Cheese</label>
<label><input type="checkbox" name="topping" value="onion"> Onion</label>
<label><input type="checkbox" name="topping" value="mushroom"> Mushroom</label>
</fieldset>

<label for="comments">Delivery instructions:</label>
<textarea id="comments" name="comments"></textarea><br>

<button type="submit">Submit order</button>
</form>

<script>
document.getElementById('pizza-form').addEventListener('submit', function (e) {
e.preventDefault();
var form = e.target;
var data = { form: {} };

// Collect all named fields
var fd = new FormData(form);
fd.forEach(function (value, key) {
if (key in data.form) {
// Multiple values for same key -> promote to array
if (!Array.isArray(data.form[key])) {
data.form[key] = [data.form[key]];
}
data.form[key].push(value);
} else {
data.form[key] = value;
}
});

document.body.textContent = JSON.stringify(data);
});
</script>
</body>
</html>
4 changes: 2 additions & 2 deletions testing/test_browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -740,9 +740,9 @@ def test_click_with_delay_parameter(browser):
# Extract the delay value from result
delay_value = int(result.split(":")[1].strip().replace("ms", ""))
print(delay_value)
# Allow 10ms tolerance for CI runner timing variations
# Allow 25ms tolerance for CI runner and browser timing variations
assert delay_value >= delay_ms
assert delay_value <= delay_ms + 10
assert delay_value <= delay_ms + 25


def test_click_with_force_parameter(browser):
Expand Down
Loading
Loading