use xa11y::*;
pub fn app_root() -> App {
let names = ["xa11y-test-app", "xa11y Test App"];
for attempt in 0..3 {
for name in &names {
if let Ok(app) = App::by_name(name) {
return app;
}
}
if attempt < 2 {
std::thread::sleep(std::time::Duration::from_millis(200));
}
}
panic!("Could not find test app after retries (tried {:?})", names);
}
pub fn one(app: &App, selector: &str) -> Element {
let results = app
.locator(selector)
.elements()
.unwrap_or_else(|e| panic!("Selector '{}' failed: {}. App: {}", selector, e, app));
assert!(
results.len() == 1,
"Selector '{}' matched {} elements (expected 1). App: {}",
selector,
results.len(),
app
);
results.into_iter().next().unwrap()
}
pub fn named(app: &App, substring: &str) -> Element {
let selector = format!("[name*=\"{}\"]", substring);
let results = app
.locator(&selector)
.elements()
.unwrap_or_else(|e| panic!("Selector '{}' failed: {}. App: {}", selector, e, app));
assert!(
!results.is_empty(),
"No element with name containing '{}'. App: {}",
substring,
app
);
results.into_iter().next().unwrap()
}
pub fn try_act(element: &Element, action: &str) -> Result<()> {
element.provider().perform_action(element, action)
}
pub fn act(element: &Element, action: &str) -> App {
try_act(element, action).unwrap_or_else(|e| panic!("Action '{}' failed: {}", action, e));
std::thread::sleep(std::time::Duration::from_millis(100));
app_root()
}