RobotFramework - AutoItLibrary: сбой при импорте тестовой библиотеки "AutoItLibrary" - PullRequest
0 голосов
/ 22 марта 2019

Может ли кто-нибудь поддержать меня в этом случае?

Я устанавливаю те же шаги на 2 компьютерах с аналогичными конфигурациями.Но одна машина работает.Сбой одного компьютера при импорте AutoItLibrary.

Просмотр журнала поездок - ошибка показывает:

  20190322 16:34:04.751 [WARN]: Importing test library "AutoItLibrary" failed

Traceback (most recent call last):
Initializing test library 'AutoItLibrary' with no arguments failed: com_error: (-2147221008, 'CoInitialize has not been called.', None, None)
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\robotide\lib\robot\running\testlibraries.py", line 167, in _get_instance
    return libcode(*self.positional_args, **dict(self.named_args))
  File "C:\Python27\lib\site-packages\AutoItLibrary\__init__.py", line 84, in __init__
    self._AutoIt = win32com.client.Dispatch("AutoItX3.Control")
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
  File "C:\Python27\lib\site-packages\robotide\spec\librarymanager.py", line 87, in _fetch_keywords
    return get_import_result(path, library_args)
  File "C:\Python27\lib\site-packages\robotide\spec\libraryfetcher.py", line 24, in get_import_result
    lib = robotapi.TestLibrary(path, args)
  File "C:\Python27\lib\site-packages\robotide\lib\robot\running\testlibraries.py", line 54, in TestLibrary
    lib.create_handlers()
  File "C:\Python27\lib\site-packages\robotide\lib\robot\running\testlibraries.py", line 100, in create_handlers
    self._create_handlers(self.get_instance())
  File "C:\Python27\lib\site-packages\robotide\lib\robot\running\testlibraries.py", line 159, in get_instance
    self._libinst = self._get_instance(self._libcode)
  File "C:\Python27\lib\site-packages\robotide\lib\robot\running\testlibraries.py", line 169, in _get_instance
    self._raise_creating_instance_failed()
  File "C:\Python27\lib\site-packages\robotide\lib\robot\running\testlibraries.py", line 314, in _raise_creating_instance_failed
    % (self.name, args_text, msg, details))


20190322 16:34:05.048 [INFO]: Found Robot Framework version 3.1.1 from C:\Python27\lib\site-packages\robot.

20190322 16:34:05.048 [INFO]: Started RIDE 1.7.3.1 using python version 2.7.14 with wx version 4.0.4 in win32.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019
@echo off
setlocal

set "jsfile=%temp%\autoit3x_comtest.js"

(
    echo try {
    echo     oAutoIt = new ActiveXObject("AutoItX3.Control"^);
    echo }
    echo catch (e^) {
    echo     WScript.Echo("Catch: " + e^);
    echo     WScript.Quit (1^);
    echo }
) > "%jsfile%"

set "system=System32"

if /i not "%PROCESSOR_ARCHITECTURE%" == "x86" (
    set "system=SysWOW64"
)

echo Using: %system%

"%SYSTEMROOT%\%system%\cscript.exe" //nologo "%jsfile%"
if not errorlevel 1 (
    echo No error detected.
    goto :done
)

>nul 2>nul net session
if errorlevel 1 (
    if not exist "AutoItX3.dll" if not exist "AutoItX3_x64.dll" goto :done
    echo Require to run as admin to register any dlls.
    goto :done
)

if exist "AutoItX3.dll" (
    echo Register AutoItX3.dll
    for %%A in ("/u" "") do (
        "%SYSTEMROOT%\%system%\regsvr32.exe" /s %%~A "AutoItX3.dll"
    )
)

if exist "AutoItX3_x64.dll" if exist "%SYSTEMROOT%\SysWOW64" (
    echo Register AutoItX3_x64.dll
    for %%A in ("/u" "") do (
        "%SYSTEMROOT%\System32\regsvr32.exe" /s %%~A "AutoItX3_x64.dll"
    )
)

:done
del "%jsfile%"

Я подозреваю, что AutoItX3.dll не зарегистрирован, что выдает ошибку COM.

Код выше представляет собой пакетный файл, так что вы можете сохранить его как, например, autoitx_comtest.cmd. Он использует JScript, чтобы попытаться загрузить объект AutoItX3.Control. Если произойдет сбой, и сценарий будет запущен с правами администратора, он зарегистрирует библиотеки, если они существуют в каталоге.

AutoitLibrary обычно предоставляет только 32-битную DLL, что составляет AutoItX3.dll. Если вы также хотите 64-битную версию, добавьте AutoItX3_x64.dll в каталог, который будет зарегистрирован. Если у вас установлен AutoIt3, возможно, у вас уже есть dll, зарегистрированные установщиком.

Если у вас установлен 64-битный Python, тогда AutoItX3_x64.dll может потребоваться использовать AutoItLibrary с ним, поскольку 64-битные исполняемые файлы не могут использовать 32-битные библиотеки DLL и наоборот.

Примечание. Если вы знаете, как зарегистрировать dll с помощью regsvr32, вы можете просто использовать это вместо пакетного файла.

Совместимость с дополнительными dll

Для совместимости с AutoItLibrary с использованием более старой версии 3.3.6.0 AutoItX3.dll. Я мог бы порекомендовать использовать dll из архивных версий и загрузить autoit-v3.3.6.0-sfx.exe чтобы получить дллс В последней версии AutoItX были удалены некоторые методы, такие как RegRead. Кроме того, автор AutoItLibrary может не поддерживать любую версию, кроме 3.3.6.0.

Если у вас установлена ​​последняя версия AutoIt Installer, вам может потребоваться отменить регистрацию этих dll и убедиться, что dll 3.3.6.0 зарегистрированы для совместимости. Я не уверен, если вы можете иметь разные версии DLL зарегистрирован в то же время, в той же системе.

Последняя версия dll AutoItX может работать довольно хорошо, но ключевые слова AutoItLibrary, перечисленные в документации, такие как Reg Read, Reg Write и некоторые другие, могут быть недоступны, так как методы были удалены из последних версий.

Последние версии совместимы, ваш выбор.

0 голосов
/ 22 марта 2019

У меня была такая же проблема, и я протестировал 32-битную библиотеку, затем работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...