Välityspalvelimen todennus Seleniumissa vaikeutuu, kun selain – ei verkkosivu – pyytää käyttäjätunnusta ja salasanaa. Oikea ratkaisu riippuu välityspalvelimen tyypistä, selaimesta, Selenium-versiosta ja siitä, voidaanko tunnistetiedot antaa testin ulkopuolella. Tässä oppaassa selitetään luotettavat Selenium 4 -lähestymistavat, missä vanhemmat kiertotavat toimivat edelleen ja miksi hälytysten käsittelykoodi usein epäonnistuu.

Mikä on välityspalvelin?

Välityspalvelin on välittäjä, joka lähettää pyyntöjä verkkosivustoille selaimesi puolesta. Kohde näkee välityspalvelimen IP-osoitteen Seleniumia suorittavan koneen sijaan. Testaustiimit käyttävät välityspalvelimia alueellisten kokemusten validointiin, liikenteen reitittämiseen valvottujen verkkojen kautta, pyyntöjen tarkastamiseen tai automatisoitujen työkuormien jakamiseen.

Välityspalvelimen URL-osoite sisältää yleensä isännän ja portin, kuten proxy.example.test:8080Yksityiset palvelut saattavat myös vaatia käyttäjätunnuksen ja salasanan. Selenium voi määrittää välityspalvelimen päätepisteen selaimen asetuksista, mutta todennuskehotteita hallitsee selain, eivätkä ne aina näy WebDriverille kuten tavalliset HTML-lomakkeet.

Valitse sopiva verkko: staattiset osoitteet sopivat kätevästi sallittujen listaamiseen, kun taas kiertävät verkot sopivat laajamittaiseen tiedonkeruuseen. asuinvälityspalveluntarjoajien opas selittää käytännön eroja.

Käytä automaatiota vain, jos sinulla on siihen lupa, noudata verkkosivuston ehtoja ja pidä tunnistetiedot poissa lähdekoodista ja testilokeista.

Ero SOCKS:n ja HTTP-välityspalvelimen välillä

HTTP-välityspalvelimet ymmärtävät verkkoliikennettä ja ne konfiguroidaan yleensä erillisillä HTTP- ja HTTPS-arvoilla. SOCKS-välityspalvelimet toimivat alemmalla tasolla ja voivat kuljettaa erityyppistä TCP-liikennettä tulkitsematta sovellusprotokollaa. SOCKS5 tukee lisäksi todennusta ja on yleensä ensisijainen SOCKS-versio.

ominainenHTTP/HTTPS-välityspalvelinSOCKS5-välityspalvelin
LiikenneSuunniteltu selaimen verkkopyyntöjä vartenToimii useiden TCP-pohjaisten sovellusten kanssa
ProtokollatietoisuusYmmärtää HTTP-pyyntöjä ja otsikoitaVälittää liikenteen lukematta HTTP-semantiikkaa
Seleenin asetuksetHTTP- ja SSL-välityspalvelinkenttien määrittäminenAseta SOCKS-päätepiste ja versio
Tyypillinen käyttöVerkkotestaus, suodatus, välimuisti, tarkastusJoustava tunnelointi ja ei-HTTP-liikenne

Selaimen ja välityspalveluntarjoajan on tuettava samaa menetelmää. Kelvollinen päätepiste ei takaa, että Selenium pystyy suorittamaan natiivin käyttäjätunnus/salasana-valintaikkunan automaattisesti.

Kuinka käsitellä välityspalvelinta Selenium Webdriverissä Chromessa

Välityspalvelimelle, joka ei vaadi interaktiivista todennusta, Selenium 4 voi määrittää Proxy objekti ChromeOptions. Nykyinen Selenium-selaimen asetusten virallinen dokumentaatio osoittaa tätä kykyihin perustuvaa lähestymistapaa.

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

Proxy proxy = new Proxy();
proxy.setHttpProxy("proxy.example.test:8080");
proxy.setSslProxy("proxy.example.test:8080");

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

WebDriver driver = new ChromeDriver(options);
driver.get("https://example.com");

SOCKS5:lle aseta SOCKS-päätepiste ja -versio sen sijaan:

Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

Todennetut välityspalvelimet vaativat erityissuunnittelua. Nykyaikaiset selaimet saattavat hylätä tunnistetietojen upottamisen URL-osoitteeseen, ja se voi paljastaa salaisuuksia. Suosi näitä lähestymistapoja:

  1. IP-sallittujen osoitteiden lista: valtuuta CI-runner- tai Selenium Grid -solmusi kiinteä julkinen IP-osoite, jotta selainikkunaa ei tule näkyviin.
  2. Paikallinen yhdyskäytävä: Aseta luotettava välityspalvelin testikoneelle. Selenium muodostaa yhteyden paikallisesti ilman tunnistetietoja ja yhdyskäytävä todentaa itsensä ylävirtaan.
  3. Hallittu selainlaajennus: Luo sisäinen Chrome-laajennus, joka määrittää välityspalvelimen ja vastaa todennushaasteisiin. Lataa se vain suojatusta testiartefaktista.
  4. Ruudukkotason kokoonpano: Määritä verkko ja salaisuudet Selenium-solmulla sen sijaan, että jakaisit tunnistetiedot jokaiselle testille.

Lue tunnistetiedot salaisuuksien hallinnasta tai ympäristökohtaisesta testikonfiguraatiosta. Älä koskaan committoi niitä Gitiin, tulosta niitä konsolin tulosteeseen tai sisällytä niitä kuvakaappauksiin. Käynnistämisen jälkeen varmista lopetus-IP hyväksytyllä testipäätepisteellä ennen kuin jatkat ohjelmistopaketin käyttöä.

Yleinen vika: ERR_PROXY_CONNECTION_FAILED yleensä osoittaa, että isäntä, portti, protokolla tai verkkopolku on väärä. Toistuu 407 Proxy Authentication Required vastaukset osoittavat puuttuvia tai hylättyjä tunnistetietoja.

AutoIt-työkalun käyttö

AutoIt voi automatisoida Windowsin valintaikkunoita paikantamalla ikkunan, kirjoittamalla tunnistetiedot ja painamalla painiketta. Tämä oli aikoinaan yleinen Selenium-ratkaisu, koska WebDriver ei pystynyt käyttämään selaimen omistamia todennusikkunoita.

Menetelmä on hauras: se on vain Windowsille, vaatii lukitsemattoman interaktiivisen työpöydän, on riippuvainen ikkunoiden otsikoista ja ajoituksesta, ja se yleensä epäonnistuu headless-säiliöissä tai etäkäyttöisissä CI-agenteissa. Se voi myös paljastaa salasanoja komentosarjojen tai prosessiargumenttien kautta.

Jos vanhassa ympäristössä ei ole vaihtoehtoa, käännä AutoIt-skripti, tallenna se kontrolloituun testiartefaktien sijaintiin, nouda tunnistetiedot turvallisesti suorituksen aikana ja odota tarkkaa valintaikkunaa kiinteän lepotilan käyttämisen sijaan. Rajoita tämä tekniikka erilliseen Windows-ajopiiriin. Ylläpidettävissä ohjelmistopaketteissa IP-sallittujen osoitteiden listaus, yhdyskäytävä tai keskitetysti määritetyt Grid-solmut ovat turvallisempia vaihtoehtoja.

Hälytysten käyttäminen

Selenium pystyy käsittelemään verkkosivun koodin luomia JavaScript-hälytyksiä:

Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
    .until(ExpectedConditions.alertIsPresent());
alert.accept();

Välityspalvelimen todennusikkuna on kuitenkin yleensä selaimen Chrome-ikkuna, ei JavaScript-hälytys. Siksi driver.switchTo().alert() usein heittää NoAlertPresentException vaikka tunnistetietokehote olisi näkyvissä. Sama rajoitus koskee monia HTTP-perustodennusikkunoita.

Käytä hälytysrajapintaa vasta sen jälkeen, kun olet varmistanut, että WebDriver tunnistaa kehotteen. Jos se ei tunnista sitä, poista kehote verkkomäärityksistä tai käytä jotakin yllä kuvatuista todennetun välityspalvelimen lähestymistavoista. Tämä on vakaampaa kuin näppäinpainallusten koordinointi ikkunan kanssa, jota Selenium ei voi tarkastaa.

UKK

Voiko Selenium asettaa välityspalvelimen suoraan?

Kyllä. Selenium 4 voi välittää HTTP-, SSL- tai SOCKS-asetukset selaimen asetusten ja välityspalvelimen kautta. Tämä määrittää päätepisteen, mutta ei välttämättä suorita selaimen omistamaa todennuskehotetta loppuun.

Miksi käyttäjätunnus:salasana@isäntä:portti ei toimi Chromessa?

Nykyaikaiset selaimet saattavat estää URL-osoitteisiin upotetut tunnistetiedot, ja syntaksi voi vuotaa salaisuuksia lokeihin ja historiaan. Käytä sen sijaan IP-sallittujen IP-osoitteiden listaa, suojattua yhdyskäytävää tai kontrolloitua testausinfrastruktuuria.

Voiko Selenium käsitellä välityspalvelimen kirjautumisen switchTo().alert()-funktiolla?

Yleensä ei. Välityspalvelimen todennus tapahtuu yleensä selaimen käyttöliittymässä JavaScript-hälytyksen sijaan, joten WebDriver saattaa ilmoittaa, ettei hälytystä ole.

Toimiiko välityspalvelimen todennus Chromessa ilman pääntuottoa?

Se voi toimia, kun todennus ratkaistaan ​​ilman interaktiivista kehotetta. IP-sallittujen IP-osoitteiden listaus, paikallinen yhdyskäytävä tai solmutason kokoonpano sopivat paremmin toimintoa ilman toimintoa.

Pitäisikö minun käyttää AutoItiä Selenium-välityspalvelimen todennukseen?

Käytä sitä vain rajoitetulle vanhalle Windows-työnkululle. Se on hauras CI:n suhteen ja vähemmän turvallinen kuin valintaikkunan poistaminen verkkomäärityksen kautta.

Mikä välityspalvelintyyppi sopii parhaiten selaimen automatisointiin?

Se riippuu valtuutetusta tehtävästä. HTTP-välityspalvelimet ovat yksinkertaisia ​​verkkoliikenteelle, SOCKS5 on joustava ja kotitalousverkot voivat auttaa sijaintitestauksessa. Vertaile vaihtoehtoja välityspalvelintyyppien oppaassamme.