blob: 533dfd795017fc5c6042399aaeff0f1fc2d443b1 [file] [log] [blame]
import pytest
from webdriver.bidi.modules.script import ContextTarget
from . import assert_console_entry, create_console_api_message_from_string
from ... import any_string, int_interval
@pytest.mark.asyncio
@pytest.mark.parametrize(
"log_argument, expected_text",
[
("'TEST'", "TEST"),
("'TWO', 'PARAMETERS'", "TWO PARAMETERS"),
("{}", any_string),
("['1', '2', '3']", any_string),
("null, undefined", "null undefined"),
],
ids=[
"single string",
"two strings",
"empty object",
"array of strings",
"null and undefined",
],
)
async def test_text_with_argument_variation(
bidi_session, subscribe_events, top_context, wait_for_event, wait_for_future_safe, log_argument, expected_text,
):
await subscribe_events(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, top_context, "log", log_argument)
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(event_data, text=expected_text, context=top_context["context"])
@pytest.mark.asyncio
@pytest.mark.parametrize(
"log_method, expected_level",
[
("assert", "error"),
("debug", "debug"),
("error", "error"),
("info", "info"),
("log", "info"),
("table", "info"),
("trace", "debug"),
("warn", "warn"),
],
)
async def test_level(
bidi_session, subscribe_events, top_context, wait_for_event, wait_for_future_safe, log_method, expected_level
):
await subscribe_events(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
if log_method == "assert":
# assert has to be called with a first falsy argument to trigger a log.
await create_console_api_message_from_string(
bidi_session, top_context, "assert", "false, 'foo'")
else:
await create_console_api_message_from_string(
bidi_session, top_context, log_method, "'foo'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(
event_data, text="foo", level=expected_level, method=log_method
)
@pytest.mark.asyncio
async def test_timestamp(bidi_session, subscribe_events, top_context, wait_for_event, wait_for_future_safe, current_time):
await subscribe_events(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
time_start = await current_time()
script = """new Promise(resolve => {
setTimeout(() => {
console.log('foo');
resolve();
}, 100);
});
"""
await bidi_session.script.evaluate(
expression=script,
await_promise=True,
target=ContextTarget(top_context["context"]),
)
event_data = await wait_for_future_safe(on_entry_added)
time_end = await current_time()
assert_console_entry(event_data, text="foo", timestamp=int_interval(time_start, time_end))
@pytest.mark.asyncio
async def test_new_context_with_new_window(bidi_session, subscribe_events, top_context, wait_for_event, wait_for_future_safe):
await subscribe_events(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, top_context, 'log', "'foo'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(event_data, text="foo", context=top_context["context"])
new_context = await bidi_session.browsing_context.create(type_hint="tab")
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, new_context, 'log', "'foo_in_new_window'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(event_data, text="foo_in_new_window", context=new_context["context"])
@pytest.mark.asyncio
async def test_new_context_with_refresh(bidi_session, subscribe_events, top_context, wait_for_event, wait_for_future_safe):
await subscribe_events(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, top_context, 'log', "'foo'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(event_data, text="foo", context=top_context["context"])
await bidi_session.browsing_context.navigate(
context=top_context["context"], url=top_context["url"], wait="complete"
)
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, top_context, 'log', "'foo_after_refresh'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(
event_data, text="foo_after_refresh", context=top_context["context"]
)
@pytest.mark.asyncio
async def test_different_contexts(
bidi_session,
subscribe_events,
top_context,
wait_for_event,
wait_for_future_safe,
test_page_same_origin_frame,
):
await bidi_session.browsing_context.navigate(
context=top_context["context"], url=test_page_same_origin_frame, wait="complete"
)
contexts = await bidi_session.browsing_context.get_tree(root=top_context["context"])
assert len(contexts[0]["children"]) == 1
frame_context = contexts[0]["children"][0]
await subscribe_events(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, top_context, "log", "'foo'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(event_data, text="foo", context=top_context["context"])
on_entry_added = wait_for_event("log.entryAdded")
await create_console_api_message_from_string(
bidi_session, frame_context, "log", "'bar'")
event_data = await wait_for_future_safe(on_entry_added)
assert_console_entry(event_data, text="bar", context=frame_context["context"])