Publish final URL after navigation
If the URL specified in a navigation command results in a redirect, we want to publish the final destination, rather than the provided location. Thus, after navigation completes, we get the browser's current URL and publish that instead.dev/ci
parent
8431a33f20
commit
4eba92f4a0
|
@ -69,6 +69,13 @@ pub struct GetTitleResponse {
|
||||||
pub value: String,
|
pub value: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub struct GetCurrentUrlResponse {
|
||||||
|
pub value: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
@ -85,4 +92,6 @@ pub enum Command {
|
||||||
GetTitle,
|
GetTitle,
|
||||||
#[serde(rename = "WebDriver:Navigate")]
|
#[serde(rename = "WebDriver:Navigate")]
|
||||||
Navigate(NavigateParams),
|
Navigate(NavigateParams),
|
||||||
|
#[serde(rename = "WebDriver:GetCurrentURL")]
|
||||||
|
GetCurrentUrl,
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,8 @@ use tracing::{debug, error, trace, warn};
|
||||||
|
|
||||||
pub use error::{CommandError, ConnectionError, ErrorResponse, MessageError};
|
pub use error::{CommandError, ConnectionError, ErrorResponse, MessageError};
|
||||||
use message::{
|
use message::{
|
||||||
Command, GetTitleResponse, Hello, NavigateParams, NewSessionParams,
|
Command, GetCurrentUrlResponse, GetTitleResponse, Hello, NavigateParams,
|
||||||
NewSessionResponse,
|
NewSessionParams, NewSessionResponse,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
@ -174,6 +174,13 @@ impl Marionette {
|
||||||
Ok(res.value)
|
Ok(res.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_current_url(&mut self) -> Result<String, CommandError> {
|
||||||
|
let res: GetCurrentUrlResponse =
|
||||||
|
self.conn.send_message(Command::GetCurrentUrl).await?.unwrap();
|
||||||
|
debug!("Received message: {:?}", res);
|
||||||
|
Ok(res.value)
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn navigate<U>(&mut self, url: U) -> Result<(), CommandError>
|
pub async fn navigate<U>(&mut self, url: U) -> Result<(), CommandError>
|
||||||
where
|
where
|
||||||
U: Into<String>,
|
U: Into<String>,
|
||||||
|
|
|
@ -136,8 +136,13 @@ impl<'a> crate::mqtt::MessageHandler for MessageHandler<'a> {
|
||||||
if let Err(e) = self.marionette.navigate(url.to_string()).await {
|
if let Err(e) = self.marionette.navigate(url.to_string()).await {
|
||||||
error!("Failed to navigate: {}", e);
|
error!("Failed to navigate: {}", e);
|
||||||
}
|
}
|
||||||
if let Err(e) = publisher.publish_url(screen, &url).await {
|
match self.marionette.get_current_url().await {
|
||||||
error!("Failed to publish title: {}", e);
|
Ok(u) => {
|
||||||
|
if let Err(e) = publisher.publish_url(screen, &u).await {
|
||||||
|
error!("Failed to publish URL: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => error!("Failed to get current browser URL: {}", e),
|
||||||
}
|
}
|
||||||
match self.marionette.get_title().await {
|
match self.marionette.get_title().await {
|
||||||
Ok(t) => {
|
Ok(t) => {
|
||||||
|
|
Loading…
Reference in New Issue