mod common;
use std::time::Duration;
#[tokio::test]
async fn expect_page_resolves_on_new_page() {
let browser = match common::browser().await {
Some(b) => b,
None => {
eprintln!("[skip] no browser available");
return;
}
};
let ctx = browser.new_context().await.unwrap();
let (page, _) = tokio::join!(
ctx.expect_page(Some(Duration::from_secs(5))),
ctx.new_page(),
);
let page = page.expect("expected a page from expect_page");
let _ = page.url().await;
ctx.close().await.unwrap();
browser.close().await.unwrap();
}
#[tokio::test]
async fn expect_request_matches_navigation() {
let browser = match common::browser().await {
Some(b) => b,
None => {
eprintln!("[skip] no browser available");
return;
}
};
let ctx = browser.new_context().await.unwrap();
let page = ctx.new_page().await.unwrap();
let url = common::http_server("<html><body><p>ok</p></body></html>").await;
let (req, _) = tokio::join!(
ctx.expect_request("127.0.0.1", Some(Duration::from_secs(5))),
page.goto(&url, None),
);
let req = req.expect("expected a matching request");
assert!(req.url().contains("127.0.0.1"));
ctx.close().await.unwrap();
browser.close().await.unwrap();
}
#[tokio::test]
async fn expect_console_matches_log() {
let browser = match common::browser().await {
Some(b) => b,
None => {
eprintln!("[skip] no browser available");
return;
}
};
let ctx = browser.new_context().await.unwrap();
let page = ctx.new_page().await.unwrap();
page.goto("about:blank", None).await.unwrap();
let (msg, _) = tokio::join!(
ctx.expect_console("hello", Some(Duration::from_secs(5))),
page.evaluate::<serde_json::Value>("console.log('hello world')"),
);
let msg = msg.expect("expected a matching console message");
assert!(msg.text().contains("hello"));
ctx.close().await.unwrap();
browser.close().await.unwrap();
}
#[tokio::test]
async fn expect_page_times_out_when_no_match() {
let browser = match common::browser().await {
Some(b) => b,
None => {
eprintln!("[skip] no browser available");
return;
}
};
let ctx = browser.new_context().await.unwrap();
let res = ctx
.expect_page(Some(Duration::from_millis(500)))
.await;
match res {
Ok(_) => panic!("expected a timeout error, but a page matched"),
Err(e) => {
let msg = e.to_string();
assert!(
msg.contains("Timeout") || msg.contains("timeout"),
"expected a Timeout error, got: {msg}"
);
}
}
ctx.close().await.unwrap();
browser.close().await.unwrap();
}