use common::*;
use rstest::rstest;
use thirtyfour::{common::print::PrintParameters, prelude::*, support::block_on};
mod common;
#[rstest]
fn iframe_switch(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let url = sample_page_url();
c.goto(&url).await?;
c.find(By::Css("#iframe_page_id")).await?.click().await?;
c.find(By::Id("iframe_button"))
.await
.expect_err("should not find the button in the iframe");
c.find(By::Id("root_button")).await?;
let iframe_element = c.find(By::Id("iframe")).await?;
iframe_element.enter_frame().await?;
let button_in_iframe = c.find(By::Id("iframe_button")).await?;
button_in_iframe.click().await?;
c.find(By::Id("root_button"))
.await
.expect_err("Should not be able to access content in the root context");
c.enter_parent_frame().await?;
c.find(By::Id("root_button")).await?;
Ok(())
})
}
#[rstest]
fn new_window(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
c.new_window().await?;
let windows = c.windows().await?;
assert_eq!(windows.len(), 2);
c.close_window().await
})
}
#[rstest]
fn new_window_switch(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let window_1 = c.window().await?;
c.new_window().await?;
let window_2 = c.window().await?;
assert_eq!(
window_1, window_2,
"After creating a new window, the session should not have switched to it"
);
let all_windows = c.windows().await?;
assert_eq!(all_windows.len(), 2);
let new_window = all_windows
.into_iter()
.find(|handle| handle != &window_1)
.expect("Should find a differing window handle");
c.switch_to_window(new_window).await?;
let window_3 = c.window().await?;
assert_ne!(
window_3, window_2,
"After switching to a new window, the window handle returned from window() should differ now."
);
c.close_window().await
})
}
#[rstest]
fn new_tab_switch(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let window_1 = c.window().await?;
c.new_tab().await?;
let window_2 = c.window().await?;
assert_eq!(
window_1, window_2,
"After creating a new window, the session should not have switched to it"
);
let all_windows = c.windows().await?;
assert_eq!(all_windows.len(), 2);
let new_window = all_windows
.into_iter()
.find(|handle| handle != &window_1)
.expect("Should find a differing window handle");
c.switch_to_window(new_window).await?;
let window_3 = c.window().await?;
assert_ne!(
window_3, window_2,
"After switching to a new window, the window handle returned from window() should differ now."
);
c.close_window().await
})
}
#[rstest]
fn close_window(test_harness: TestHarness) -> WebDriverResult<()> {
block_on(async {
let c = test_harness.driver();
let window_1 = c.window().await?;
c.new_tab().await?;
let window_2 = c.window().await?;
assert_eq!(
window_1, window_2,
"Creating a new window should not cause the client to switch to it."
);
let handles = c.windows().await?;
assert_eq!(handles.len(), 2);
c.close_window().await?;
c.window().await.expect_err(
"After closing a window, the client can't find its currently selected window.",
);
let other_window = handles
.into_iter()
.find(|handle| handle != &window_2)
.expect("Should find a differing handle");
c.switch_to_window(other_window).await?;
c.close_window().await?;
c.windows().await.expect_err("Session should be closed.");
test_harness.disable_auto_close();
Ok(())
})
}
#[rstest]
fn close_window_twice_errors(test_harness: TestHarness) -> WebDriverResult<()> {
block_on(async {
let c = test_harness.driver();
c.close_window().await?;
c.close_window().await.expect_err("Should get a no such window error");
test_harness.disable_auto_close();
Ok(())
})
}
#[rstest]
fn windwow_name(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let url = sample_page_url();
c.goto(&url).await?;
let main_title = c.title().await?;
let handle = c.window().await?;
c.set_window_name("main").await?;
let new_handle = c.new_tab().await?;
c.switch_to_window(new_handle).await?;
let other_page_url = other_page_url();
c.goto(&other_page_url).await?;
assert_ne!(c.window().await?, handle);
let other_title = c.title().await?;
assert_ne!(other_title, main_title);
c.switch_to_named_window("main").await?;
assert_eq!(c.window().await?, handle);
Ok(())
})
}
#[rstest]
fn in_new_tab(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let url = sample_page_url();
c.goto(&url).await?;
let main_title = c.title().await?;
assert_eq!(main_title, "Sample Page");
let other_page_url = other_page_url();
let other_title = c
.in_new_tab(|| async {
c.goto(&other_page_url).await?;
c.title().await
})
.await?;
assert_eq!(other_title, "Other Page");
assert_eq!(c.title().await?, main_title);
Ok(())
})
}
#[rstest]
fn window_rect(test_harness: TestHarness) -> WebDriverResult<()> {
block_on(async {
let c = test_harness.driver();
c.set_window_rect(20, 20, 1900, 1000).await?;
let r = c.get_window_rect().await?;
if !cfg!(target_os = "macos") {
if test_harness.browser() == "firefox" {
assert_eq!(r.y, 20);
} else {
assert_eq!(r.x, 20);
assert_eq!(r.y, 20);
}
}
assert_eq!(r.width, 1900);
assert_eq!(r.height, 1000);
Ok(())
})
}
#[rstest]
fn screenshot(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let url = sample_page_url();
c.goto(&url).await?;
let screenshot_data = c.screenshot_as_png().await?;
assert!(!screenshot_data.is_empty(), "screenshot data is empty");
Ok(())
})
}
#[rstest]
fn print_page(test_harness: TestHarness) -> WebDriverResult<()> {
let c = test_harness.driver();
block_on(async {
let url = sample_page_url();
c.goto(&url).await?;
let printing_data = c.print_page(PrintParameters::default()).await?;
assert!(!printing_data.is_empty(), "printing data is empty");
Ok(())
})
}