Сhromedriver:如何添加对基于Chromium的浏览器的支持

时间:2018-08-20 14:50:24

标签: selenium selenium-webdriver selenium-chromedriver ui-automation chromium

将浏览器添加到UI自动化框架/包装器的可用浏览器列表中,以通过适当的浏览器成功运行自动测试需要什么?例如,我想添加使用Chromium核心的浏览器“ Sputnik”。

2 个答案:

答案 0 :(得分:0)

使您的浏览器受Selenium支持,它将与所有框架一起使用。 Selenium使用浏览器特定的驱动程序。

由于您的浏览器基于Chromium,因此ChromeDriver很有可能立即可用。

Documentation how to use Codeception with ChromeDriver.

如果无法使其正常工作,则可能需要对代码进行一些更改,以便派生chromedriver并对其进行修改以使其起作用。

如果您使用的是全新的浏览器,则必须实现WebDriver协议,但我认为这对您而言不是必需的

答案 1 :(得分:0)

  

TL; DR:使用Selenium + Codeception(或其他任何受Chrome支持的铬   框架),为“无效”添加特殊的配置环境   浏览器为Sputnik,其中二进制路径等效于您的   铬二元。铬项目后重新编译chromedriver   删除对我们来说不必要的检查浏览器条件   版本,请预先安装以下软件套件:Visual Studio(С++,   wdk + sdk + mfc + atl),depot_tools,Perl,Python2 + Pywin32之后   需要修复Windows Kits源代码中的一个障碍,因此   无法通过忍者编译该项目。

有用的材料

[英语]:http://www.chromium.org/developers/how-tos/get-the-code http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up

[俄语]:https://gist.github.com/oshatrk/0d454018e720b44b45d3e9679da6a98a https://habr.com/company/jugru/blog/347024/

此说明适用于Windows 10。

下载最新版本的原始Chromedriver并放入C:/ Windows):https://chromedriver.storage.googleapis.com/index.html-对于调试在无效/有效的浏览器中运行自动测试时可能出现的非显而易见的问题很有用

  

您只能使用标准命令行(cmd),否则您将使用   遇到许多不明显的错误,例如“%filename%:no这样的   文件或目录。”

将设置添加到git:

$ git config --global user.name "%USERNAME%"
$ git config --global user.email "%EMAIL%"
$ git config --global core.autocrlf false
$ git config --global core.filemode false
$ git config --global branch.autosetuprebase always 

安装Visual Studio(用于C ++),选择最新的SDK软件包,MFC和ATL支持软件包,Windows调试工具,Windows Driver Kit(WDK)和软件仓库工具。

从仓库https://github.com/chromium/chromium下载Chromium,并准备编译项目:

  

要节省空间(〜10GB),最好用以下命令执行第一行   标志:fetch --no-history chromium

d:\chromium> fetch chromium
d:\chromium> mkdir src
d:\chromium> cd src
d:\chromium\src> gclient sync
d:\chromium\src> gn gen out/Default

如果您在执行gn命令的过程中遇到类似的错误:

ninja: error: loading 'build.ninja': no such file or directory
ninja: error: loading 'build.ninja': ═х єфрхЄё эрщЄш єърчрээ√щ Їрщы.

-很有可能是Win10 SDK的已安装版本冲突,或者是由于缺少Windows的WDK /调试工具所致。

尝试自动测试执行情况。首先,检查一堆Selenium + Codeception,确保在没有与Chromedriver冲突的情况下在Chrome中成功成功执行自动测试。例如,Chromedriver 2.41支持Chrome v67-69,最终将能够支持Sputnik v3.5.2152.0 gostssl。

一旦我们确信最初的工作能力可以设置Sputnik浏览器调用(到目前为止,自动测试代码执行还很不稳定):在yml-config中创建env-section或将设置了Chrome的Chrome写入标准配置部分人造卫星的路径:

 modules:
  enabled: [WebDriver, WebHelper, Asserts]
  config:
    WebDriver:
      browser: chrome
      capabilities:
      chromeOptions:
        args: [--remote-debugging-port=9222]
        binary: 'C:/Program Files (x86)/Sputnik/Sputnik/Application/browser.exe'
    #window_size: 1200x768 is not supported for Sputnik

需要使用声明的标志--remote-debugging-port=9222以避免错误 [Facebook \ WebDriver \ Exception \ UnknownServerException]未知错误:Devtools端口号文件内容\ <50250>的格式意外。 我预先警告您不要使用window_size参数,因为Chromium不支持该参数,否则我们将遇到错误: [Facebook \ WebDriver \ Exception \ UnknownServerException]未知错误:未处理的检查器错误:{“代码“:-32601,”消息“:”未找到'Browser.getWindowForTarget'“} 。请勿尝试根据Sputnik版​​本的Chrome覆盖产品信息,因为在这种情况下,可执行文件将变得无效,因此在尝试启动时会看到错误“无法启动应用程序,因为其并行配置是错误” ,当您运行自动测试时,我们将遇到错误: [Facebook \ WebDriver \ Exception \ UnknownServerException]未知错误:无法创建Chrome进程。 在当前指令中通过Sputnik运行自动测试时,应该会看到以下错误: [Facebook \ WebDriver \ Exception \ UnknownServerException]未知错误:无法识别的Chrome版本:SputnikBrowser / 3.5.2152.0(GOST)。 —在取消检查浏览器版本后,通过重新编译Chromedriver解决。

检查您是否可以实际从源代码编译Chromedriver:

d:\chromium\src> ninja -C out/Default chromedriver

如果一切正常,则文件将位于此处:

  

d:\ chromium \ src \ out \ Default \ chromedriver.exe

在将更新后的chromedriver.exe放入C:/ Windows后,检查是否使用此编译版本的chromedriver可以在Chrome浏览器中成功地成功执行自动测试。

在文件chromedriver \ chrome \ browser_info.cc中编辑行:128,以忽略浏览器版本的不匹配:

return error;

将错误状态替换为成功状态:(不要告诉任何人我给您此解决方案):

return Status(kOk);

在删除默认文件夹的内容之后,再次编译Chromedriver。另外,如果在编译期间出错,则应在下次编译之前清除文件夹,否则编译后的版本很可能会损坏。

如果编译成功,则将更新后的chromedriver.exe放入C:/ Windows,然后首先验证自动测试是否仍在Chrome浏览器中成功执行:成功执行后,检查Sputnik中的操作。

如果在编译过程中遇到以下错误日志:

[3281/4416] CXX obj/ui/gfx/gfx/font_fallback_win.obj
FAILED: obj/ui/gfx/gfx/font_fallback_win.obj
../../third_party/llvm-build/Release+Asserts/bin/clang-cl.exe /nologo /showIncludes "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\include" "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include" "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\ucrt" "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\shared" "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\um" "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\winrt" "-imsvc..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\cppwinrt" -DGFX_IMPLEMENTATION -DV8_DEPRECATION_WARNINGS -DUSE_AURA=1 -DNO_TCMALLOC -DFULL_SAFE_BROWSING -DSAFE_BROWSING_CSD -DSAFE_BROWSING_DB_LOCAL -DOFFICIAL_BUILD -DCHROMIUM_BUILD -DFIELDTRIAL_TESTING_ENABLED "-DCR_CLANG_REVISION=\"338452-2\"" -D_HAS_NODISCARD -D_HAS_EXCEPTIONS=0 -D__STD_C -D_CRT_RAND_S -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE -D_ATL_NO_OPENGL -D_WINDOWS -DCERT_CHAIN_PARA_HAS_EXTRA_FIELDS -DPSAPI_VERSION=1 -DWIN32 -D_SECURE_ATL -D_USING_V110_SDK71_ -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -DWIN32_LEAN_AND_MEAN -DNOMINMAX -D_UNICODE -DUNICODE -DNTDDI_VERSION=0x0A000002 -D_WIN32_WINNT=0x0A00 -DWINVER=0x0A00 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DWEBP_EXTERN=extern -DSK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS -DSK_HAS_PNG_LIBRARY -DSK_HAS_WEBP_LIBRARY -DSK_HAS_JPEG_LIBRARY -DSK_SUPPORT_GPU=1 "-DSK_GPU_WORKAROUNDS_HEADER=\"gpu/config/gpu_driver_bug_workaround_autogen.h\"" -DGR_GL_FUNCTION_TYPE=__stdcall -DU_USING_ICU_NAMESPACE=0 -DU_ENABLE_DYLOAD=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -DUCHAR_TYPE=wchar_t "-DFT_CONFIG_CONFIG_H=\"freetype-custom-config/ftconfig.h\"" "-DFT_CONFIG_MODULES_H=\"freetype-custom-config/ftmodule.h\"" "-DFT_CONFIG_OPTIONS_H=\"freetype-custom-config/ftoption.h\"" -DPDFIUM_REQUIRED_MODULES -DCHROMIUM_RESTRICT_VISIBILITY -I../.. -Igen -I../../third_party/libwebp/src -I../../skia/config -I../../skia/ext -I../../third_party/skia/include/c -I../../third_party/skia/include/config -I../../third_party/skia/include/core -I../../third_party/skia/include/effects -I../../third_party/skia/include/encode -I../../third_party/skia/include/gpu -I../../third_party/skia/include/images -I../../third_party/skia/include/lazy -I../../third_party/skia/include/pathops -I../../third_party/skia/include/pdf -I../../third_party/skia/include/pipe -I../../third_party/skia/include/ports -I../../third_party/skia/include/utils -I../../third_party/skia/src/gpu -I../../third_party/skia/src/sksl -I../../third_party/skia/modules/skottie/include -I../../third_party/icu/source/common -I../../third_party/icu/source/i18n -I../../third_party/ced/src -I../../third_party/zlib -I../../third_party/freetype/include -I../../third_party/freetype/src/include -I../../third_party/harfbuzz-ng/src/src /utf-8 /X -fcolor-diagnostics -fmerge-all-constants -Xclang -mllvm -Xclang -instcombine-lower-dbg-declare=0 -no-canonical-prefixes -fcomplete-member-pointers /Gy /FS /bigobj /d2FastFail /Zc:sizedDealloc- -fmsc-version=1911 -m64 /Brepro /W4 -Wimplicit-fallthrough -Wthread-safety /WX /wd4091 /wd4127 /wd4251 /wd4275 /wd4312 /wd4324 /wd4351 /wd4355 /wd4503 /wd4589 /wd4611 /wd4100 /wd4121 /wd4244 /wd4505 /wd4510 /wd4512 /wd4610 /wd4838 /wd4995 /wd4996 /wd4456 /wd4457 /wd4458 /wd4459 /wd4200 /wd4201 /wd4204 /wd4221 /wd4245 /wd4267 /wd4305 /wd4389 /wd4702 /wd4701 /wd4703 /wd4661 /wd4706 /wd4715 /wd4702 -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-covered-switch-default -Wno-unneeded-internal-declaration -Wno-undefined-var-template -Wno-nonportable-include-path -Wno-user-defined-warnings -Wno-unused-lambda-capture -Wno-null-pointer-arithmetic -Wno-enum-compare-switch -Wno-ignored-pragma-optimize /O1 /Ob2 /Oy- /Zc:inline /Gw /Oi /Z7 -fno-standalone-debug /MT -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang enforce-in-thirdparty-webkit -Xclang -plugin-arg-find-bad-constructs -Xclang check-enum-max-value -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare /wd4267 /TP /wd4577 /GR- /c ../../ui/gfx/font_fallback_win.cc /Foobj/ui/gfx/gfx/font_fallback_win.obj /Fd"obj/ui/gfx/gfx_cc.pdb"
In file included from ../../ui/gfx/font_fallback_win.cc:9:
In file included from ..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\winrt\wrl.h:18:
..\..\..\..\..\..\..\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\um\wrl\event.h(228,112): error: use of undeclared identifier 'DefaultDelegateCheckMode'

在文件C:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\um\wrl\event.h

编辑228和1199行(这不好,但是别无选择)。

第228行,而不是:

template<typename TDelegateInterface, typename TCallback, unsigned int argCount, DelegateCheckMode checkMode = DefaultDelegateCheckMode>

指定:

template<typename TDelegateInterface, typename TCallback, unsigned int argCount, DelegateCheckMode checkMode>

在1199行而不是:

extern __declspec(selectany) const DelegateCheckMode DefaultDelegateCheckMode = NoCheck;

指定:

extern __declspec(selectany) const DelegateCheckMode;

-在此之后,删除当前失败的chromedriver程序集,然后再次重新编译。

如果编译成功,则将更新后的chromedriver.exe放入C:/ Windows,并首先验证自动测试是否仍在Chrome中成功执行-如果成功,请检查人造卫星中的操作。

  

我认为当前更新的Chromedriver可以与任何   Chromium引擎上的浏览器。