Selenium是一个伞形项目,封装了支持Web浏览器自动化的各种工具和库。Selenium专门为W3C WebDriver specification-与所有主要Web浏览器兼容的平台和语言中立的编码接口
这个项目是由志愿贡献者慷慨捐赠数千小时进行代码开发和维护而实现的
Selenium的源代码位于Apache 2.0 license
文档
叙述性文档:
接口文档:
拉取请求
请阅读CONTRIBUTING.md在提交您的拉取请求之前
要求
- Bazelisk中指定的Bazel版本自动下载的Bazel包装器
.bazelversion
文件,并透明地将所有命令行参数传递给真正的Bazel二进制文件 - 最新版本的Java 11 OpenJDK
java
和jar
在路径上(请确保使用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,您还需要:
- Visual Studio 2008
- 32位和64位交叉编译器
构建可以在任何平台上运行,但如果您不是在Windows上构建,则会以静默方式跳过IE的测试
大楼
巴泽尔
Bazel是由谷歌的优秀员工建造的。Bazel管理依赖项下载、生成Selenium二进制文件、执行测试,并且完成所有这些工作的速度都相当快
下面是运行Bazel的更详细的说明,但是如果您可以成功构建java和javascript文件夹而不出错,那么您应该相信您的系统上有正确的二进制文件
在构建之前
确保您安装了Firefox并安装了最新版本$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上运行浏览器测试
为了运行浏览器测试,您首先需要安装特定于浏览器的驱动程序,例如PATH
默认情况下,Bazel在您当前的X-server UI中运行这些测试。如果您愿意,也可以在虚拟或嵌套的X服务器中运行它们
- 运行X服务器
Xvfb :99
或Xnest :99
- 运行窗口管理器,例如,
DISPLAY=:99 jwm
- 运行您感兴趣的测试:
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对于这些步骤)