Skip to content

Commit 086bc51

Browse files
committed
add tests for events
1 parent 0baf75d commit 086bc51

File tree

1 file changed

+214
-0
lines changed

1 file changed

+214
-0
lines changed

py/test/selenium/webdriver/common/bidi_browsing_context_tests.py

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,220 @@ def on_navigation_committed(info):
593593
driver.browsing_context.remove_event_handler("navigation_committed", callback_id)
594594

595595

596+
def test_add_event_handler_dom_content_loaded(driver, pages):
597+
"""Test adding event handler for dom_content_loaded event."""
598+
events_received = []
599+
600+
def on_dom_content_loaded(info):
601+
events_received.append(info)
602+
603+
callback_id = driver.browsing_context.add_event_handler("dom_content_loaded", on_dom_content_loaded)
604+
assert callback_id is not None
605+
606+
# Navigate to trigger the event
607+
context_id = driver.current_window_handle
608+
url = pages.url("simpleTest.html")
609+
driver.browsing_context.navigate(context=context_id, url=url, wait=ReadinessState.COMPLETE)
610+
611+
assert len(events_received) == 1
612+
assert any("simpleTest" in event.url for event in events_received)
613+
614+
driver.browsing_context.remove_event_handler("dom_content_loaded", callback_id)
615+
616+
617+
def test_add_event_handler_load(driver, pages):
618+
"""Test adding event handler for load event."""
619+
events_received = []
620+
621+
def on_load(info):
622+
events_received.append(info)
623+
624+
callback_id = driver.browsing_context.add_event_handler("load", on_load)
625+
assert callback_id is not None
626+
627+
context_id = driver.current_window_handle
628+
url = pages.url("simpleTest.html")
629+
driver.browsing_context.navigate(context=context_id, url=url, wait=ReadinessState.COMPLETE)
630+
631+
assert len(events_received) == 1
632+
assert any("simpleTest" in event.url for event in events_received)
633+
634+
driver.browsing_context.remove_event_handler("load", callback_id)
635+
636+
637+
def test_add_event_handler_navigation_started(driver, pages):
638+
"""Test adding event handler for navigation_started event."""
639+
events_received = []
640+
641+
def on_navigation_started(info):
642+
events_received.append(info)
643+
644+
callback_id = driver.browsing_context.add_event_handler("navigation_started", on_navigation_started)
645+
assert callback_id is not None
646+
647+
context_id = driver.current_window_handle
648+
url = pages.url("simpleTest.html")
649+
driver.browsing_context.navigate(context=context_id, url=url, wait=ReadinessState.COMPLETE)
650+
651+
assert len(events_received) == 1
652+
assert any("simpleTest" in event.url for event in events_received)
653+
654+
driver.browsing_context.remove_event_handler("navigation_started", callback_id)
655+
656+
657+
def test_add_event_handler_fragment_navigated(driver, pages):
658+
"""Test adding event handler for fragment_navigated event."""
659+
events_received = []
660+
661+
def on_fragment_navigated(info):
662+
events_received.append(info)
663+
664+
callback_id = driver.browsing_context.add_event_handler("fragment_navigated", on_fragment_navigated)
665+
assert callback_id is not None
666+
667+
# First navigate to a page
668+
context_id = driver.current_window_handle
669+
url = pages.url("linked_image.html")
670+
driver.browsing_context.navigate(context=context_id, url=url, wait=ReadinessState.COMPLETE)
671+
672+
# Then navigate to the same page with a fragment to trigger the event
673+
fragment_url = url + "#link"
674+
driver.browsing_context.navigate(context=context_id, url=fragment_url, wait=ReadinessState.COMPLETE)
675+
676+
assert len(events_received) == 1
677+
assert any("link" in event.url for event in events_received)
678+
679+
driver.browsing_context.remove_event_handler("fragment_navigated", callback_id)
680+
681+
682+
@pytest.mark.xfail_firefox
683+
def test_add_event_handler_navigation_failed(driver):
684+
"""Test adding event handler for navigation_failed event."""
685+
events_received = []
686+
687+
def on_navigation_failed(info):
688+
events_received.append(info)
689+
690+
callback_id = driver.browsing_context.add_event_handler("navigation_failed", on_navigation_failed)
691+
assert callback_id is not None
692+
693+
# Navigate to an invalid URL to trigger the event
694+
context_id = driver.current_window_handle
695+
try:
696+
driver.browsing_context.navigate(context=context_id, url="http://invalid-domain-that-does-not-exist.test/")
697+
except Exception:
698+
# Expect an exception due to navigation failure
699+
pass
700+
701+
assert len(events_received) == 1
702+
assert events_received[0].url == "http://invalid-domain-that-does-not-exist.test/"
703+
assert events_received[0].context == context_id
704+
705+
driver.browsing_context.remove_event_handler("navigation_failed", callback_id)
706+
707+
708+
def test_add_event_handler_user_prompt_opened(driver, pages):
709+
"""Test adding event handler for user_prompt_opened event."""
710+
events_received = []
711+
712+
def on_user_prompt_opened(info):
713+
events_received.append(info)
714+
715+
callback_id = driver.browsing_context.add_event_handler("user_prompt_opened", on_user_prompt_opened)
716+
assert callback_id is not None
717+
718+
# Create an alert to trigger the event
719+
create_alert_page(driver, pages)
720+
driver.find_element(By.ID, "alert").click()
721+
WebDriverWait(driver, 5).until(EC.alert_is_present())
722+
723+
assert len(events_received) == 1
724+
assert events_received[0].type == "alert"
725+
assert events_received[0].message == "cheese"
726+
727+
# Clean up the alert
728+
driver.browsing_context.handle_user_prompt(context=driver.current_window_handle)
729+
driver.browsing_context.remove_event_handler("user_prompt_opened", callback_id)
730+
731+
732+
def test_add_event_handler_user_prompt_closed(driver, pages):
733+
"""Test adding event handler for user_prompt_closed event."""
734+
events_received = []
735+
736+
def on_user_prompt_closed(info):
737+
events_received.append(info)
738+
739+
callback_id = driver.browsing_context.add_event_handler("user_prompt_closed", on_user_prompt_closed)
740+
assert callback_id is not None
741+
742+
create_prompt_page(driver, pages)
743+
driver.execute_script("prompt('Enter something')")
744+
WebDriverWait(driver, 5).until(EC.alert_is_present())
745+
746+
driver.browsing_context.handle_user_prompt(
747+
context=driver.current_window_handle, accept=True, user_text="test input"
748+
)
749+
750+
assert len(events_received) == 1
751+
assert events_received[0].accepted is True
752+
assert events_received[0].user_text == "test input"
753+
754+
driver.browsing_context.remove_event_handler("user_prompt_closed", callback_id)
755+
756+
757+
@pytest.mark.xfail_chrome
758+
@pytest.mark.xfail_firefox
759+
@pytest.mark.xfail_edge
760+
def test_add_event_handler_history_updated(driver, pages):
761+
"""Test adding event handler for history_updated event."""
762+
events_received = []
763+
764+
def on_history_updated(info):
765+
events_received.append(info)
766+
767+
callback_id = driver.browsing_context.add_event_handler("history_updated", on_history_updated)
768+
assert callback_id is not None
769+
770+
# Navigate to a page and use history API to trigger the event
771+
context_id = driver.current_window_handle
772+
url = pages.url("simpleTest.html")
773+
driver.browsing_context.navigate(context=context_id, url=url, wait=ReadinessState.COMPLETE)
774+
775+
# Use history.pushState to trigger history updated event
776+
driver.execute_script("history.pushState({}, '', '/new-path');")
777+
778+
assert len(events_received) == 1
779+
assert any("/new-path" in event.url for event in events_received)
780+
781+
driver.browsing_context.remove_event_handler("history_updated", callback_id)
782+
783+
784+
@pytest.mark.xfail_firefox
785+
def test_add_event_handler_download_will_begin(driver, pages):
786+
"""Test adding event handler for download_will_begin event."""
787+
events_received = []
788+
789+
def on_download_will_begin(info):
790+
events_received.append(info)
791+
792+
callback_id = driver.browsing_context.add_event_handler("download_will_begin", on_download_will_begin)
793+
assert callback_id is not None
794+
795+
# click on a download link to trigger the event
796+
context_id = driver.current_window_handle
797+
url = pages.url("downloads/download.html")
798+
driver.browsing_context.navigate(context=context_id, url=url, wait=ReadinessState.COMPLETE)
799+
800+
download_xpath_file_1_txt = '//*[@id="file-1"]'
801+
driver.find_element(By.XPATH, download_xpath_file_1_txt).click()
802+
WebDriverWait(driver, 5).until(lambda d: len(events_received) > 0)
803+
804+
assert len(events_received) == 1
805+
assert events_received[0].suggested_filename == "file_1.txt"
806+
807+
driver.browsing_context.remove_event_handler("download_will_begin", callback_id)
808+
809+
596810
def test_add_event_handler_with_specific_contexts(driver):
597811
"""Test adding event handler with specific browsing contexts."""
598812
events_received = []

0 commit comments

Comments
 (0)