2013-07-18 3 views
1

Я тестирую наше приложение с использованием Selenium WebDriver 2.25 в разных версиях Windows Explorer, что означает запуск теста на разных машинах.Ошибка при ошибке «Ошибка при загрузке библиотеки» при вызове IEDriverServer

При тестировании приложения с IE 8 работает нормально, я получаю нечетную ошибку при попытке запустить тест на рабочей станции с помощью IE7. Это работает Windows XP с пакетом обновления 2 с загруженными Java 6. При попытке запустить исполняемый файл IEDriverServer_Win32, я получаю следующее сообщение об ошибке:

Failed to load the library from temp directory: C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp 

Что мне не хватает?

+0

Я попробовал то же самое с версией драйвера сервера IE 2.32 и получил ту же самую ошибку, так что модернизация не обязательно почини это. Что касается вопроса о разрешении, ну да, я подозревал, что это причина, но какие разрешения где? Любая помощь с этим будет оценена по достоинству. – NestorDRod

ответ

2

IEDriverServer.exe создан как маленький простой исполняемый файл с файлом .dll с реальным кодом для IE-драйвера, встроенного в ресурс внутри .exe. Чтобы использовать эту .dll, исполняемый файл должен извлечь .dll где-нибудь, чтобы он мог вызвать API Windows LoadLibrary для загрузки и последующего выполнения кода .dll. По умолчанию это извлечение выполняется в каталог temp. Не создавая файл журнала для изучения проблемы, мы можем предположить, что .dll либо не извлекается должным образом, либо когда-то извлечено, что вызов LoadLibrary не удался.

К счастью, драйвер IE обеспечивает обходной путь для этой проблемы. Если вы передадите --extract-path="path\to\extract\dll\to" в качестве аргумента командной строки для IEDriverServer.exe, вы сможете явно указать, какую директорию использовать для извлечения. См. Документацию для языковых привязок, чтобы узнать, как этот аргумент командной строки передавался программно.

Например, что делает эту работу для Java, код будет выглядеть следующим образом:

// WARNING: Entirely untested code below! Was written from memory without 
// the benefit of an IDE. May not work correctly or even compile without 
// modification. 
// Assume "location" is a properly instantiated java.io.File containing 
// the location of IEDriverServer.exe. 
InternetExplorerDriverService service = new InternetExplorerDriverService.Builder() 
    .withExtractPath(location) 
    .build(); 
WebDriver driver = new InternetExplorerDriver(service); 

Другой альтернатива может быть вручную запускать IEDriverServer.exe, и использовать свои языковые привязки RemoteWebDriver класса для подключения к Это. Это означает, что вы несете ответственность за всю жизнь исполняемого процесса, но это может помочь вам найти поведение, которое вы ищете.

+0

Спасибо. Это, безусловно, шаг ближе. К сожалению, я не могу найти никакой информации о том, как установить значение программно. Класс InternetExplorerDriver в API Selenium WebDriver имеет возможность определять возможности, но установка пути экстракта, по-видимому, не является одним из них. – NestorDRod

+0

Обновлен, чтобы включить пример Java. – JimEvans

+0

К сожалению, класс InternetExplorerDriverService в Selenium 2.25, похоже, не поддерживает метод Builder(). – NestorDRod

0

У меня на самом деле была аналогичная проблема, когда она не могла извлечь из временного каталога, что я сделал, я зашел в папку, где IEDriver извлекает DLL, и удаляет все в этой папке, связанной с Selenium.

Так что для меня это было C: \ Users \ usnm \ AppData \ Local \ Temp, и было много файлов, таких как webdriver_blahblah120398405.tmp и много похожих папок. Когда я удалил их все, моя программа снова начала работать. Итак, для вас это будет C: \ DOCUME ~ 1 \ ADMINI ~ 1 \ LOCALS ~ 1 \ Temp

Конечно, наши ошибки немного отличаются (и я использую Selenium 2.33). Моя ошибка «не удалось извлечь», а не «не удалось загрузить»

+0

Спасибо. Я закончил тем, что системный администратор удостоверился, что у тестовой учетной записи был доступ к временной папке. Немного клочья, но он работает для того, что мы делаем. – NestorDRod

0

В некоторых системах антивирус или другое защитное программное обеспечение предотвращает запуск exe-файлов или, в этом случае, загрузку библиотеки dll из папки temp.

При запуске узла selenium добавьте дополнительный параметр и укажите путь извлечения в текущий каталог (убедитесь, что текущий каталог доступен для записи вашим пользователем и не требует повышенных привилегий). Например, если ваш IEDriverServer.exe находится в C: \ узел затем

java -jar selenium-server-standalone.jar -role node ..... -Dwebdriver.ie.driver.extractpath=C:\node 

это должно решить проблему.

-1

После ответа 2, это точный способ сделать это:

File extractPath=new File("c://your//file//todllextracts"); 
InternetExplorerDriverService service = new InternetExplorerDriverService.Builder().withExtractPath(extractPath).build(); 

driver = new InternetExplorerDriver(service); 
Смежные вопросы