Problem z pobraniem kodu z URL-a przy użyciu Selenium w Javie

0

Cześć,

Aktualnie piszę, a w zasadzie jestem na samym początku pisania testów automatycznych do API Yahoo z użyciem RestAssured, Selenium i Javy. I mam taki problem. Aby uzyskać kod potrzebny do pobrania tokena konieczne jest wejście do przeglądarki pod adres, który wygląda mniej więcej tak:

https://api.login.yahoo.com/oauth2/request_auth?client_id=tutaj_id&redirect_uri=https://exemplary2.redirect.uri.com&response_type=code

I zanim strzele do api po token chce sobie wejść z użyciem selenium pod wskazany powyżej adres URL (on po wejściu w niego ręcznie w przeglądarce zmienia postać na taką - "https://exemplary2.redirect.uri.com/?code=59npa7y" i tutaj mam upragnione code)

Gdy wchodzi się ręcznie pod adres, wszystko jest ok, ale w momencie, gdy używam do tego selenium:

        driver.get("https://api.login.yahoo.com/oauth2/request_auth?client_id=tutaj_id&redirect_uri=https://exemplary2.redirect.uri.com&response_type=code");

To on otwiera przeglądarke i wchodzi pod adres, ale mi to przerabia na coś takiego i nie mam zwrotnego url z code -

https://login.yahoo.com/?done=https%3A%2F%2Fapi.login.yahoo.com%2Foauth2%2Frequest_auth%3Fclient_id%3Ddj0yJmk9Sk11QTEzTHA4QzVYJnM9Y29uc3VtZXJzZWNyZXQmc3Y9MCZ4PTc3%26redirect_uri%3Dhttps%253A%252F%252Fexemplary2.redirect.uri.com%26response_type%3Dcode&src=oauth&redirect_uri=https%3A%2F%2Fexemplary2.redirect.uri.com&client_id=tutaj_id

Próbowałem użyć zamiast driver.get, navigate().to. Próbowałem te stringi jakoś posklejać, concatem, +. StringBuilderem appdendować. Cały czas nic. Kończą mi się pomysły powoli.

Czy jest ktoś w stanie zaproponować jeszcze jakiś pomysł?
Z góry dzięki za odpowiedź.

0

A to nie jest tak, że jak strzelasz z Selenium, to on Ci raz jeszcze opakowuje Twój urla w ten sam sposób? Może spróbuj wysłać od razu https://exemplary2.redirect.uri.com/?code=59npa7y?

0

Ten - https://exemplary2.redirect.uri.com/?code=59npa7y to jest już po redirecie zwrócony z kodem po wejściu w ten pierwszy podany w opisie. Wrzucam pierwszy link z opisu, robi redirect i otrzymuje ten z code. A w selenium driver.get jest z pierwszym URLem z opisu, ale nie robi redirecta, tylko przerabia go jakoś dziwnie. Wygląda jakby to było związane ze znakami :// i /. Jakby nie mógł tego ogarnąć, że jest ten drugi httpis w środku z :// i przez to encoduje/decoduje to.

0

Z tymi redirectami to zawsze jest maniana, obecnie w pracy też mam podobne problemy

0

Jakiego WebDrivera używasz?

0

Żeby nie wchodzić super głęboko trochę przerobiłem i może to tu trochę dziwnie wyglądać, ale w celu pokazania jak to u mnie działa mniej wiecej to tak:

  protected WebDriver driver = driver();
 private WebDriver driver(){
        WebDriverManager
                .chromedriver()
                .setup();

        return new ChromeDriver();
    }

Ale pewnie chodziło o jaki, a więc odpowiedz ChromeDrivera.

0

A jaka wersja tego Chroma?

0
javafxdev napisał(a):

A jaka wersja tego Chroma?

Wersja 78.0.3904.70

0

A nie myślałeś żeby przejść na nowszego, od tego czasu pojawiło się wiele poprawek np:

Fixed incorrect calculation of element coordinates
Fixed ChromeDriver crash caused by javascript alert fired during command execution
Chromedriver now waits for Current frame to load.
Fixed: ChromeDriver may block indefinitely while waiting for pending navigation.
Fixed: Chromedriver crashes on getPageSource on some sites.
Fixed: ChromeDriver crashes on certain element or click commands.
Updated Chromedriver to work correctly with prototype.js.

A jaka wersja selenium?

0

Selenium - 3.141.5

0
javafxdev napisał(a):

A nie myślałeś żeby przejść na nowszego, od tego czasu pojawiło się wiele poprawek np:

Fixed incorrect calculation of element coordinates
Fixed ChromeDriver crash caused by javascript alert fired during command execution
Chromedriver now waits for Current frame to load.
Fixed: ChromeDriver may block indefinitely while waiting for pending navigation.
Fixed: Chromedriver crashes on getPageSource on some sites.
Fixed: ChromeDriver crashes on certain element or click commands.
Updated Chromedriver to work correctly with prototype.js.

A jaka wersja selenium?

Zaktualizowalem o nowego drivera, ale bez zmian.

0

a to nie jest tak że w normalnej przeglądarce jesteś zalgowany do yahoo, a jak uderzasz testem to wtedy nie jesteś zalogowany i on najpierw przekierowuje Cię na adres zeby się zalogować?

1

A próbowałeś coś takiego?

driver.get(URLDecoder.decode(url, StandardCharsets.UTF_8.name())

1 użytkowników online, w tym zalogowanych: 0, gości: 1