Jak uruchomić przypadki testowe Selenium WebDriver w przeglądarce Chrome?

160

Próbowałem tego

WebDriver driver = new ChromeDriver();

Ale otrzymuję błąd jako

Testy zakończone niepowodzeniem: setUp (com.TEST): ścieżka do pliku wykonywalnego sterownika musi być ustawiona we właściwości systemowej webdriver.chrome.driver; Aby uzyskać więcej informacji, zobacz kod tutaj . Najnowszą wersję można pobrać z Link

Jak sprawić, by Chrome testował przypadki testowe Selenium-WebDriver?

Książę
źródło
Byłoby pomocne, gdybyś mógł stwierdzić, czy pobrałeś sterownik selenium chrome z code.google.com/p/chromedriver/downloads/list i dodałeś go do biblioteki w eclipse pod „Add External Jars” przed uruchomieniem selenium-java kod.
Hemanth

Odpowiedzi:

252

Musisz pobrać wykonywalny sterownik z: Pobieranie ChromeDriver

Następnie wszystko, co musisz zrobić, to przed utworzeniem obiektu sterownika użyć następujących elementów (już pokazanych w odpowiedniej kolejności):

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
WebDriver driver = new ChromeDriver();

Zostało to wyodrębnione z najbardziej przydatnego przewodnika z dokumentacji ChromeDriver .

aimbire
źródło
@aimbire: hej, mam ten sam problem. Zrobiłem to samo, co sugerowałeś, ale otrzymałem ten błąd. „java.lang.IllegalStateException: plik wykonywalny sterownika nie istnieje: D: \ selenimPRJarg1 \ chromedriver.exe„ Czy czegoś mi brakuje ”?
kTiwari
Musisz pobrać Selenium Standalone Server z docs.seleniumhq.org/download i dodać plik jar jako zależność do projektu Java.
dikirill
4
gdzie tego używasz / piszesz? System.setProperty ("webdriver.chrome.driver", "/ ścieżka / do / chromedriver"); Sterownik WebDriver = nowy ChromeDriver ();
tijnn
1
Zbadałem każdą odpowiedź na to pytanie i tylko ta zadziałała dla mnie. (y)
puffles
Chociaż jest to technicznie poprawne, naprawdę nie powinieneś ustawiać tej zmiennej środowiskowej w kodzie, jest to to samo, co twarde kodowanie ścieżki w kodzie. Zmienna środowiskowa powinna być ustawiona na maszynie, na której uruchamiasz kod, umożliwiając każdej maszynie przechowywanie wykonywalnego sterownika chrome w unikalnym miejscu, ale wszystko nadal działa.
Ardesco
21

Pobierz aktualizację sterownika chrome ze sterownika Chrome. Przeczytaj również informację o wydaniu tutaj. Jeśli przeglądarka Chrome jest zaktualizowana, musisz pobrać nowy sterownik chormedriver z powyższego linku, ponieważ byłby kompaktowy z nową wersją przeglądarki.

 public class chrome 
 {

  public static void main(String[] args) {

       System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
       WebDriver driver = new ChromeDriver();


    driver.get("http://www.google.com");

  }

 }
Ankit jain
źródło
3
To uciążliwe rozwiązanie. Radziłbym to zmienić, jeśli jest to to, czego używasz obecnie.
aimbire,
1
Link do pobrania jest teraz nieaktualny.
Gone Coding,
Ten kod nie działa w przeglądarce Google Chrome w wersji 69.0.3497.100 (oficjalna kompilacja) (64-bitowa). Proszę brachu, zaproponuj nowy kod. Do tej pory działał w starszej wersji, mniejszej niż 65.0.0
Mitesh Thakery
18

Powinieneś pobrać chromeDriver do folderu i dodać ten folder do zmiennej PATH. Będziesz musiał ponownie uruchomić konsolę, aby działała.

Fabrice31
źródło
8

Jeśli używasz homebrew na MacOS, możesz użyć polecenia:

(EDYTUJ) :brew tap homebrew/cask && brew cask install chromedriver

Po tym powinno działać dobrze bez innej konfiguracji.

Swanhella
źródło
2
teraz jest brew tap homebrew/cask && brew cask install chromedriver.
luk2302
6

Musisz zainstalować sterownik Chrome. Możesz zainstalować ten pakiet przy użyciu modelu użytkowego, jak pokazano poniżej

Prathap Kudupu
źródło
1
Może to być ten, ale wersja w NuGet jest zbyt stara: 2.10.0 z dnia 13 października 2014 r.
Tiago Freitas Leal
Nieaktualne ponownie 23 marca. Nie można użyć w najnowszej Chrome.
willem
6

Możesz użyć poniższego kodu, aby uruchomić przypadki testowe w Chrome przy użyciu sterownika sieciowego Selenium:

import java.io.IOException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ChromeTest {

    /**
     * @param args
     * @throws InterruptedException
     * @throws IOException 
     */
    public static void main(String[] args) throws InterruptedException, IOException {
        // Telling the system where to find the Chrome driver
        System.setProperty(
                "webdriver.chrome.driver",
                "E:/chromedriver_win32/chromedriver.exe");

        WebDriver webDriver = new ChromeDriver();

        // Open google.com
        webDriver.navigate().to("http://www.google.com");

        String html = webDriver.getPageSource();

        // Printing result here.
        System.out.println(html);

        webDriver.close();
        webDriver.quit();
    }
}
Rakesh Chaudhari
źródło
5

Znajdź najnowszą wersję chromedriver tutaj . Po pobraniu rozpakuj go w katalogu głównym instalacji Pythona, np. C:/Program Files/Python-3.5I to wszystko. Nie musisz nawet nigdzie określać ścieżki i / lub dodawać chromedriverdo niej ścieżki ani w podobny sposób. Po prostu zrobiłem to na czystej instalacji Pythona i to działa.

tagoma
źródło
4
zła rada ... nie zanieczyszczaj swojej instalacji Pythona
Corey Goldberg
również OP nigdy nie określił Pythona
Corey Goldberga
4

Pobierz najnowszą wersję sterownika Chrome i użyj tego kodu:

System.setProperty("webdriver.chrome.driver", " path of chromedriver.exe");
WebDriver driver= new ChromeDriver();
driver.manage().window().maximize();
Thread.sleep(10000);
driver.get("http://stackoverflow.com");
Anuj Teotia
źródło
1

W systemie Ubuntu możesz po prostu zainstalować chromium-chromedriverpakiet:

apt install chromium-chromedriver

Należy pamiętać, że powoduje to również zainstalowanie przestarzałej wersji selenu. Aby zainstalować najnowszy selen:

pip install selenium
serv-inc
źródło
0

Wszystkie powyższe odpowiedzi są poprawne, poniżej znajduje się małe zagłębienie się w problem i rozwiązanie.

Na przykład konstruktor sterownika w selenie

WebDriver driver = new ChromeDriver();

wyszukuje plik wykonywalny sterownika, w tym przypadku sterownik Chrome wyszukuje plik wykonywalny sterownika Chrome, w przypadku gdy usługa nie może znaleźć pliku wykonywalnego, zgłaszany jest wyjątek

stąd pochodzi wyjątek (zwróć uwagę na metodę sprawdzania stanu)

 /**
   *
   * @param exeName Name of the executable file to look for in PATH
   * @param exeProperty Name of a system property that specifies the path to the executable file
   * @param exeDocs The link to the driver documentation page
   * @param exeDownload The link to the driver download page
   *
   * @return The driver executable as a {@link File} object
   * @throws IllegalStateException If the executable not found or cannot be executed
   */
  protected static File findExecutable(
      String exeName,
      String exeProperty,
      String exeDocs,
      String exeDownload) {
    String defaultPath = new ExecutableFinder().find(exeName);
    String exePath = System.getProperty(exeProperty, defaultPath);
    checkState(exePath != null,
        "The path to the driver executable must be set by the %s system property;"
            + " for more information, see %s. "
            + "The latest version can be downloaded from %s",
            exeProperty, exeDocs, exeDownload);

    File exe = new File(exePath);
    checkExecutable(exe);
    return exe;
  }

Poniżej znajduje się metoda sprawdzania stanu, która zgłasza wyjątek

  /**
   * Ensures the truth of an expression involving the state of the calling instance, but not
   * involving any parameters to the calling method.
   *
   * <p>See {@link #checkState(boolean, String, Object...)} for details.
   */
  public static void checkState(
      boolean b,
      @Nullable String errorMessageTemplate,
      @Nullable Object p1,
      @Nullable Object p2,
      @Nullable Object p3) {
    if (!b) {
      throw new IllegalStateException(format(errorMessageTemplate, p1, p2, p3));
    }
  }

ROZWIĄZANIE : ustaw właściwość systemową przed utworzeniem obiektu sterownika w następujący sposób

System.setProperty("webdriver.gecko.driver", "path/to/chromedriver.exe");
WebDriver driver = new ChromeDriver();

Poniżej znajduje się fragment kodu (dla Chrome i Firefox), w którym usługa sterownika wyszukuje plik wykonywalny sterownika:

Chrom:

   @Override
    protected File findDefaultExecutable() {
      return findExecutable("chromedriver", CHROME_DRIVER_EXE_PROPERTY,
          "https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver",
          "http://chromedriver.storage.googleapis.com/index.html");
    }

FireFox:

@Override
 protected File findDefaultExecutable() {
      return findExecutable(
        "geckodriver", GECKO_DRIVER_EXE_PROPERTY,
        "https://github.com/mozilla/geckodriver",
        "https://github.com/mozilla/geckodriver/releases");
    }

gdzie CHROME_DRIVER_EXE_PROPERTY = "webdriver.chrome.driver" i GECKO_DRIVER_EXE_PROPERTY = "webdriver.gecko.driver"

podobnie jest w przypadku innych przeglądarek, poniżej znajduje się migawka listy dostępnych implementacji przeglądarki

wprowadź opis obrazu tutaj

chuha.billi
źródło
0
To run Selenium WebDriver test cases in Chrome, follow these steps:


first of all set the property & chrome driver path

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
then initialize the Chrome Driver's object

WebDriver driver = new ChromeDriver();
then pass the url into get method of WebDriver

driver.get("http://www.google.com");
Ghanshyam
źródło
0

Umieściłem plik binarny w książce zasobów moich projektów w następujący sposób:

src\main\resources\chrome\chromedriver_win32.zip
src\main\resources\chrome\chromedriver_mac64.zip
src\main\resources\chrome\chromedriver_linux64.zip

Kod:

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.SystemUtils;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.*;
import java.nio.file.Files;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public WebDriver getWebDriver() throws IOException {
    File tempDir = Files.createTempDirectory("chromedriver").toFile();
    tempDir.deleteOnExit();
    File chromeDriverExecutable;

    final String zipResource;
    if (SystemUtils.IS_OS_WINDOWS) {
        zipResource = "chromedriver_win32.zip";
    } else if (SystemUtils.IS_OS_LINUX) {
        zipResource = "chromedriver_linux64.zip";
    } else if (SystemUtils.IS_OS_MAC) {
        zipResource = "chrome/chromedriver_mac64.zip";
    } else {
        throw new RuntimeException("Unsuppoerted OS");
    }

    try (InputStream is = getClass().getResourceAsStream("/chrome/" + zipResource)) {
        try (ZipInputStream zis = new ZipInputStream(is)) {
            ZipEntry entry;
            entry = zis.getNextEntry();
            chromeDriverExecutable = new File(tempDir, entry.getName());
            chromeDriverExecutable.deleteOnExit();
            try (OutputStream out = new FileOutputStream(chromeDriverExecutable)) {
                IOUtils.copy(zis, out);
            }
        }
    }

    System.setProperty("webdriver.chrome.driver", chromeDriverExecutable.getAbsolutePath());
    return new ChromeDriver();
}
Jonas_Hess
źródło
-2

Pobierz plik exe chromedriver i rozpakuj go w bieżącej lokalizacji projektu. Tutaj link, z którego możemy pobrać najnowszą wersję chromedriver.

https://sites.google.com/a/chromium.org/chromedriver/

Tutaj prosty kod przeglądarki startowej i przejdź do adresu url.

System.setProperty("webdriver.chrome.driver", "path of chromedriver.exe");

WebDriver driver = new ChromeDriver();

driver.get("https://any_url.com");
ER.swatantra
źródło
Pobierz chromedriver i wyodrębnij go. Następnie utwórz folder w swoim projekcie i nazwij go chromedriver i zachowaj w nim plik .exe. i skorzystaj z tej ścieżki. To jest prosty przykład kodu. „code” System.setProperty („webdriver.chrome.driver”, System.getProperty („user.dir”) + „\\ chromedriver \\ chromedriver.exe”); Sterownik WebDriver = nowy ChromeDriver (); driver.get („ google.co.in” ); WebElement searchbox = driver.findElement (By.name ("q")); searchbox.sendKeys ("najlepsze darmowe samouczki wideo dotyczące selenu"); searchbox.submit ();
vinay,
Proszę, rozważ zaktualizowanie tej odpowiedzi o dodatkowe informacje skomentowane przez Vinay.
Ricardo Souza