Selenium-浏览器自动化框架和生态系统

Selenium是一个伞形项目,封装了支持Web浏览器自动化的各种工具和库。Selenium专门为W3C WebDriver specification-与所有主要Web浏览器兼容的平台和语言中立的编码接口

这个项目是由志愿贡献者慷慨捐赠数千小时进行代码开发和维护而实现的

Selenium的源代码位于Apache 2.0 license

文档

叙述性文档:

接口文档:

拉取请求

请阅读CONTRIBUTING.md在提交您的拉取请求之前

要求

  • Bazelisk中指定的Bazel版本自动下载的Bazel包装器.bazelversion文件,并透明地将所有命令行参数传递给真正的Bazel二进制文件
  • 最新版本的Java 11 OpenJDK
  • javajar在路径上(请确保使用java可从JDK执行,但不能从JRE执行)
    • 要测试这一点,请尝试运行以下命令javac如果您只安装了JRE,则此命令将不存在。如果您遇到一系列命令行选项,那么您引用的JDK是正确的
  • Python 3.7+
  • python在路上
  • The tox automation project对于Python:pip install tox
  • MacOS用户应该安装最新版本的Xcode,包括命令行工具。以下命令应该可以工作:
xcode-select --install
  • Apple Silicon Mac的用户应添加build --host_platform=//:rosetta致他们的.bazelrc.local文件。我们正在努力确保从长远来看这不是必需的
  • Windows用户应安装最新版本的Visual Studio命令行工具和生成工具
    • BAZEL_VS环境变量应该指向构建工具的位置,例如C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
    • BAZEL_VC环境变量应该指向命令行工具的位置,例如C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
    • BAZEL_VC_FULL_VERSION环境变量应包含已安装的命令行工具的版本,例如14.27.29110

可选要求

  • Ruby 2.0

Internet Explorer驱动程序

如果您计划编译IE driver,您还需要:

构建可以在任何平台上运行,但如果您不是在Windows上构建,则会以静默方式跳过IE的测试

大楼

巴泽尔

Bazel是由谷歌的优秀员工建造的。Bazel管理依赖项下载、生成Selenium二进制文件、执行测试,并且完成所有这些工作的速度都相当快

下面是运行Bazel的更详细的说明,但是如果您可以成功构建java和javascript文件夹而不出错,那么您应该相信您的系统上有正确的二进制文件

在构建之前

确保您安装了Firefox并安装了最新版本geckodriver在您的$PATH您可能需要不时更新此信息

通用构建目标

要从源代码构建最常用的Selenium模块,请从根项目文件夹执行以下命令:

bazel build java/...

如果您手头有一些额外的时间,您可以运行此命令以获得构建成功的额外信心。这将做更多的工作来构建所有的javascript工件:

bazel build java/... javascript/...

如果您正在对此项目中的java/或javascript/文件夹进行更改,并且此命令执行时没有错误,那么您应该能够创建更改的PR。(另见CONTRIBUTING.md)

构建详细信息

  • Bazel文件名为BUILD.bazel
  • crazyfun生成文件被称为build.desc这是一个较旧的构建系统,大部分仍在用于Ruby绑定的项目中

模块的构建顺序由构建系统决定。如果要构建单个模块(假设所有依赖模块之前都已构建),请尝试以下操作:

bazel test javascript/atoms:test

在这种情况下,javascript/atoms是模块目录,test是该目录BUILD.bazel文件

如你所见构建目标在日志中滚动,您可能需要单独运行它们

常见任务(Bazel)

要从源代码构建大量Selenium二进制文件,请从根文件夹运行以下命令:

bazel build java/... javascript/...

要构建网格部署JAR,请运行以下命令:

bazel build grid

要在项目的特定区域内运行测试,请使用“test”命令,后跟文件夹或目标。测试用“小”、“中”或“大”标记,并且可以用--test_size_filters选项:

bazel test --test_size_filters=small,medium java/...

Bazel的“test”命令将运行包中的测试,包括集成测试。期待着test java/...启动浏览器并消耗大量时间和资源

编辑代码

大多数团队成员使用IntelliJ IDEA或VS.Code进行日常编辑。如果您在IntelliJ中工作,我们强烈建议您安装Bazel IJ
plugin
其文档记录在its own site

如果您使用的是IntelliJ和Bazel插件,则会有一个项目视图签入到中的树中scripts/ij.bazelproject这将使运行和编辑代码变得更容易:)

游览

代码库通常围绕用于编写组件的语言进行划分。Selenium广泛使用JavaScript,所以让我们从这里开始。使用JavaScript很容易。首先,启动开发服务器:

bazel run debug-server

现在,导航到http://localhost:2310/javascript您会发现javascript/正在显示目录。我们使用Closure
Library
来开发大部分JavaScript,所以现在导航到http://localhost:2310/javascript/atoms/test

此目录中的测试是名称以_test.html单击其中一个以加载页面并运行测试

Maven POM文件

这是public Selenium Maven
repository

生成输出

bazel属性创建顶级目录组。bazel-每个目录上的前缀

在以下方面提供帮助go

更一般但更基本的帮助go

./go --help

go只是个包装而已Rake,因此您可以使用标准命令,如rake -T要获取有关可用目标的详细信息,请执行以下操作

马文本身

如果还不清楚,那么Selenium不是用Maven构建的。它是用bazel,不过这是用go如上所述,您不必对此了解太多

也就是说,可以相对快速地构建供Maven使用的硒片。只有在针对您的应用程序测试尖端的Selenium开发(我们欢迎)时,您才会真正想要这样做。以下是构建和部署到本地maven存储库的最快方法(~/.m2/repository),同时跳过Selenium自己的测试

./go maven-install

Maven罐子现在应该在你当地了~/.m2/repository

有用资源

请参阅Build Instructions关于构建零碎的硒的最后一句话的维基页面

在Linux上运行浏览器测试

为了运行浏览器测试,您首先需要安装特定于浏览器的驱动程序,例如geckodriverchromedriver,或edgedriver这些需要放在你的PATH

默认情况下,Bazel在您当前的X-server UI中运行这些测试。如果您愿意,也可以在虚拟或嵌套的X服务器中运行它们

  1. 运行X服务器Xvfb :99Xnest :99
  2. 运行窗口管理器,例如,DISPLAY=:99 jwm
  3. 运行您感兴趣的测试:
bazel test --test_env=DISPLAY=:99 //java/... --test_tag_filters=chrome

在虚拟X服务器中运行测试的一种简单方法是使用Bazel的--run_under功能:

bazel test --run_under="xvfb-run -a" //java/... --test_tag_filters=chrome

Bazel安装/故障排除

MacOS

巴泽利克(BAZELLISK)

Bazelisk是Bazel的Mac友好启动器。要安装,请执行以下步骤:

brew tap bazelbuild/tap && \
brew uninstall bazel; \
brew install bazelbuild/tap/bazelisk

Xcode

如果您收到提到Xcode的错误,则需要安装命令行工具

Bazel for Mac需要一些额外的步骤才能正确配置。首先要做的是:使用Bazelisk项目(Philwo提供),它是Bazel的纯Golang实现。要安装Bazelisk,请首先验证您的Xcode是否会合作:执行以下命令:

xcode-select -p

如果值为/Applications/Xcode.app/Contents/Developer/,您可以继续安装bazelisk。但是,如果返回值为/Library/Developer/CommandLineTools/,您需要将Xcode系统重定向到正确的值

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/
sudo xcodebuild -license

第一个命令将提示您输入密码。第二步要求您阅读新的Xcode许可,然后通过键入“Agree”接受它。

(多亏了this thread对于这些步骤)