Bug: [FEATURE] Use OS specific profile path in selenium tests



### Feature Description

Currently the default profile path for browser in selenium.rs file is hardcoded with mac specific file path. it should be made OS  specific instead of hardcoding.

### Possible Implementation

Add a feature for OS and handle the paths in selenium.rs

### Have you spent some time to check if this feature request has been raised before?

- [X] I checked and didn't find similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

None
diff --git a/.gitignore b/.gitignore
index 81ef10ad213..62804a712fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -261,3 +261,7 @@ result*
 
 # node_modules
 node_modules/
+
+**/connector_auth.toml
+**/sample_auth.toml
+**/auth.toml
diff --git a/crates/test_utils/tests/connectors/adyen_uk_ui.rs b/crates/test_utils/tests/connectors/adyen_uk_ui.rs
index ee0d2f425bb..bf42d010603 100644
--- a/crates/test_utils/tests/connectors/adyen_uk_ui.rs
+++ b/crates/test_utils/tests/connectors/adyen_uk_ui.rs
@@ -662,21 +662,18 @@ async fn should_make_adyen_momo_atm_payment(web_driver: WebDriver) -> Result<(),
 
 #[test]
 #[serial]
-#[ignore]
 fn should_make_adyen_gpay_payment_test() {
     tester!(should_make_adyen_gpay_payment);
 }
 
 #[test]
 #[serial]
-#[ignore]
 fn should_make_adyen_gpay_mandate_payment_test() {
     tester!(should_make_adyen_gpay_mandate_payment);
 }
 
 #[test]
 #[serial]
-#[ignore]
 fn should_make_adyen_gpay_zero_dollar_mandate_payment_test() {
     tester!(should_make_adyen_gpay_zero_dollar_mandate_payment);
 }
diff --git a/crates/test_utils/tests/connectors/bluesnap_ui.rs b/crates/test_utils/tests/connectors/bluesnap_ui.rs
index ae1773ad1bd..edc024f3856 100644
--- a/crates/test_utils/tests/connectors/bluesnap_ui.rs
+++ b/crates/test_utils/tests/connectors/bluesnap_ui.rs
@@ -63,7 +63,6 @@ fn should_make_3ds_payment_test() {
 
 #[test]
 #[serial]
-#[ignore]
 fn should_make_gpay_payment_test() {
     tester!(should_make_gpay_payment);
 }
diff --git a/crates/test_utils/tests/connectors/selenium.rs b/crates/test_utils/tests/connectors/selenium.rs
index 28cb5bad0ed..865cd950f76 100644
--- a/crates/test_utils/tests/connectors/selenium.rs
+++ b/crates/test_utils/tests/connectors/selenium.rs
@@ -60,6 +60,7 @@ pub enum Assert<'a> {
     Eq(Selector, &'a str),
     Contains(Selector, &'a str),
     ContainsAny(Selector, Vec<&'a str>),
+    EitherOfThemExist(&'a str, &'a str),
     IsPresent(&'a str),
     IsElePresent(By),
     IsPresentNow(&'a str),
@@ -117,6 +118,10 @@ pub trait SeleniumTest {
                         }
                         _ => assert!(driver.title().await?.contains(search_keys.first().unwrap())),
                     },
+                    Assert::EitherOfThemExist(text_1, text_2) => assert!(
+                        is_text_present_now(driver, text_1).await?
+                            || is_text_present_now(driver, text_2).await?
+                    ),
                     Assert::Eq(_selector, text) => assert_eq!(driver.title().await?, text),
                     Assert::IsPresent(text) => {
                         assert!(is_text_present(driver, text).await?)
@@ -152,6 +157,13 @@ pub trait SeleniumTest {
                             self.complete_actions(driver, events).await?;
                         }
                     }
+                    Assert::EitherOfThemExist(text_1, text_2) => {
+                        if is_text_present_now(driver, text_1).await.is_ok()
+                            || is_text_present_now(driver, text_2).await.is_ok()
+                        {
+                            self.complete_actions(driver, events).await?;
+                        }
+                    }
                     Assert::IsPresent(text) => {
                         if is_text_present(driver, text).await.is_ok() {
                             self.complete_actions(driver, events).await?;
@@ -210,6 +222,19 @@ pub trait SeleniumTest {
                         )
                         .await?;
                     }
+                    Assert::EitherOfThemExist(text_1, text_2) => {
+                        self.complete_actions(
+                            driver,
+                            if is_text_present_now(driver, text_1).await.is_ok()
+                                || is_text_present_now(driver, text_2).await.is_ok()
+                            {
+                                success
+                            } else {
+                                failure
+                            },
+                        )
+                        .await?;
+                    }
                     Assert::IsPresent(text) => {
                         self.complete_actions(
                             driver,
@@ -400,7 +425,7 @@ pub trait SeleniumTest {
             Event::Trigger(Trigger::SwitchTab(Position::Next)),
             Event::Trigger(Trigger::Sleep(5)),
             Event::RunIf(
-                Assert::IsPresentNow("Sign in"),
+                Assert::EitherOfThemExist("Use your Google Account", "Sign in"),
                 vec![
                     Event::Trigger(Trigger::SendKeys(By::Id("identifierId"), email)),
                     Event::Trigger(Trigger::ClickNth(By::Tag("button"), 2)),
@@ -807,6 +832,8 @@ pub fn make_capabilities(browser: &str) -> Capabilities {
                 let profile_path = &format!("-profile={}", get_firefox_profile_path().unwrap());
                 caps.add_firefox_arg(profile_path).unwrap();
             } else {
+                let profile_path = &format!("-profile={}", get_firefox_profile_path().unwrap());
+                caps.add_firefox_arg(profile_path).unwrap();
                 caps.add_firefox_arg("--headless").ok();
             }
             caps.into()
@@ -832,7 +859,10 @@ fn get_chrome_profile_path() -> Result<String, WebDriverError> {
             fp.join(&MAIN_SEPARATOR.to_string())
         })
         .unwrap();
-    base_path.push_str(r"/Library/Application\ Support/Google/Chrome/Default"); //Issue: 1573
+    if env::consts::OS == "macos" {
+        base_path.push_str(r"/Library/Application\ Support/Google/Chrome/Default");
+        //Issue: 1573
+    } // We're only using Firefox on Ubuntu runner
     Ok(base_path)
 }
 
@@ -847,7 +877,17 @@ fn get_firefox_profile_path() -> Result<String, WebDriverError> {
             fp.join(&MAIN_SEPARATOR.to_string())
         })
         .unwrap();
-    base_path.push_str(r#"/Library/Application Support/Firefox/Profiles/hs-test"#); //Issue: 1573
+    if env::consts::OS == "macos" {
+        base_path.push_str(r#"/Library/Application Support/Firefox/Profiles/hs-test"#);
+    //Issue: 1573
+    } else if env::consts::OS == "linux" {
+        if let Some(home_dir) = env::var_os("HOME") {
+            if let Some(home_path) = home_dir.to_str() {
+                let profile_path = format!("{}/.mozilla/firefox/hs-test", home_path);
+                return Ok(profile_path);
+            }
+        }
+    }
     Ok(base_path)
 }
 
diff --git a/crates/test_utils/tests/connectors/stripe_ui.rs b/crates/test_utils/tests/connectors/stripe_ui.rs
index e69d134ce21..c2bf2bc9cec 100644
--- a/crates/test_utils/tests/connectors/stripe_ui.rs
+++ b/crates/test_utils/tests/connectors/stripe_ui.rs
@@ -418,7 +418,6 @@ fn should_make_3ds_mandate_with_zero_dollar_payment_test() {
 
 #[test]
 #[serial]
-#[ignore]
 fn should_make_gpay_payment_test() {
     tester!(should_make_gpay_payment);
 }
diff --git a/scripts/decrypt_browser_data.sh b/scripts/decrypt_browser_data.sh
new file mode 100755
index 00000000000..7f1c79ad21d
--- /dev/null
+++ b/scripts/decrypt_browser_data.sh
@@ -0,0 +1,10 @@
+#! /usr/bin/env bash
+
+# Decrypt the file
+# --batch to prevent interactive command
+# --yes to assume "yes" for questions
+gpg --quiet --batch --yes --decrypt --passphrase="$1" \
+--output $HOME/browser_data.tar.gz .github/secrets/browser_data.tar.gz.gpg
+
+# Unzip the tarball
+tar xzf $HOME/browser_data.tar.gz -C $HOME

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [x] Enhancement
- [x] CI/CD

## Description
<!-- Describe your changes in detail -->
This PR aims at automating Googlepay tests in UI Tests for connectors: Adyen_UK, Bluesnap and Stripe.  
Main problem with Google Pay UI automated testing is Captchas.  
Google detects automated bots / scripts when you try to login and throws in a captcha the moment `Next` button is pressed after entering in the `email_id` by elongated the content with Captcha (It is in fact hard for even humans to understand the text written on it). 
This hides the `Passwd` element and hence the UI test fails as it cannot login to the Google account anymore by timing out.  

Now, we're injecting the browser data (that contains the login data) into the browser and hence it does not ask for login now. So, no captcha now (Yes, I cannot guarantee, if tomorrow Google throws in captcha in other places). 

## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->
Reduces manual testing burden.

## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
See Connector UI tests below in CI checks


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I reviewed the submitted code
- [x] I added unit tests for my changes where possible
