diff options
author | Santo Cariotti <santo@dcariotti.me> | 2021-08-05 20:33:14 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2021-08-05 20:33:14 +0200 |
commit | 5ddacf8e8131bacbcbd360b24c4c45b5380678ee (patch) | |
tree | 7ffb5aeb9adca95aaf344ae68d810c9456f01a4c /src/browser | |
parent | 0ef059378e3b10c0eebcbb4e5abc0e033f06cd25 (diff) |
feat: get spaces of a faculty
Diffstat (limited to 'src/browser')
-rw-r--r-- | src/browser/mod.rs | 11 | ||||
-rw-r--r-- | src/browser/web_browser.rs | 32 |
2 files changed, 43 insertions, 0 deletions
diff --git a/src/browser/mod.rs b/src/browser/mod.rs index 1675595..1f44493 100644 --- a/src/browser/mod.rs +++ b/src/browser/mod.rs @@ -35,6 +35,17 @@ pub async unsafe fn get_faculties() -> WebDriverResult<Option<HashMap<String, St Ok(None) } +/// Get the spaces (rooms) available to book +pub async unsafe fn get_spaces() -> WebDriverResult<Option<HashMap<String, String>>> { + if let Some(driver) = &WEB_BROWSER { + if let Some(spaces) = driver.spaces().await? { + return Ok(Some(spaces)); + } + } + + Ok(None) +} + pub async unsafe fn select_option( klass: &str, property_name: &str, diff --git a/src/browser/web_browser.rs b/src/browser/web_browser.rs index ffbdc13..f799866 100644 --- a/src/browser/web_browser.rs +++ b/src/browser/web_browser.rs @@ -115,6 +115,38 @@ impl Browser { Ok(None) } + /// Get all spaces for booking and return an `HashMap<key, value>` when `key` is the + /// key for that space inside the `select` tag and `value` is just the text of the option. + pub async fn spaces(&self) -> WebDriverResult<Option<HashMap<String, String>>> { + if let Some(_d) = &self.driver { + thread::sleep(time::Duration::from_millis(1000)); + + _d.find_element(By::Css( + "span[aria-labelledby='select2-spaceSelector-container']", + )) + .await? + .click() + .await?; + + let list_elements = _d + .find_elements(By::Css("#select2-spaceSelector-results li")) + .await?; + + let mut spaces_ids = HashMap::<String, String>::new(); + + for i in list_elements { + spaces_ids.insert( + i.get_attribute("data-select2-id").await.unwrap().unwrap(), + i.text().await.unwrap(), + ); + } + + return Ok(Some(spaces_ids)); + } + + Ok(None) + } + /// Select an option from a list of select elements pub async fn select_option_from_list( &self, |