From: Ian Jackson Date: Tue, 29 Dec 2020 01:14:26 +0000 (+0000) Subject: fetch_log X-Git-Tag: otter-0.2.0~95 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a2ce4a5f1e6fee6dfe7f949ec6a40cc5c4037209;p=otter.git fetch_log Signed-off-by: Ian Jackson --- diff --git a/wdriver.rs b/wdriver.rs index f800141f..dc987219 100644 --- a/wdriver.rs +++ b/wdriver.rs @@ -684,8 +684,7 @@ fn prepare_thirtyfour() -> (T4d, ScreenShotCount, Vec) { console.log('wdriver.rs console log starts'); "#)?; - let cons = driver.execute_script(r#"return window.console.saved;"#)?; - eprintln!("{:?}", &cons.value()); + fetch_log(&driver, "front")?; let t = Some(5_000 * MS); driver.set_timeouts(t4::TimeoutConfiguration::new(t,t,t)) @@ -694,6 +693,34 @@ fn prepare_thirtyfour() -> (T4d, ScreenShotCount, Vec) { (driver, count, window_names) } +/// current window must be `name` +#[throws(AE)] +fn fetch_log(driver: &T4d, name: &str) { + (||{ + let got = driver.execute_script(r#" + var returning = window.console.saved; + window.console.saved = []; + return returning; + "#).context("get log")?; + + for ent in got.value().as_array() + .ok_or(anyhow!("saved isn't an array?"))? + { + #[derive(Deserialize)] + struct LogEnt(String, Vec); + + let ent: LogEnt = serde_json::from_value(ent.clone()) + .context("parse log entry")?; + eprint!("JS {} {}:", name, &ent.0); + for a in ent.1 { eprint!(" {}", a); } + eprintln!(""); + } + Ok::<_,AE>(()) + })() + .with_context(|| name.to_owned()) + .context("fetch JS log messages")?; +} + #[derive(Debug)] pub struct Window { name: String, @@ -779,29 +806,7 @@ impl<'g> Deref for WindowGuard<'g> { impl<'g> Drop for WindowGuard<'g> { fn drop(&mut self) { - (||{ - let got = self.su.driver.execute_script(r#" - var returning = window.console.saved; - window.console.saved = []; - return returning; - "#).context("get log")?; - - for ent in got.value().as_array() - .ok_or(anyhow!("saved isn't an array?"))? - { - #[derive(Deserialize)] - struct LogEnt(String, Vec); - - let ent: LogEnt = serde_json::from_value(ent.clone()) - .context("parse log entry")?; - eprint!("JS {} {}:", &self.w.name, &ent.0); - for a in ent.1 { eprint!(" {}", a); } - eprintln!(""); - } - Ok::<_,AE>(()) - })() - .with_context(|| self.w.name.clone()) - .context("update log") + fetch_log(&self.su.driver, &self.w.name) .just_warn(); } }