提交 87f339a5 编写于 作者: W wizardforcel

2020-06-24 12:09:59

上级 88e0ae81
......@@ -47,7 +47,7 @@
所有这些看起来都不酷吗? 如果是,那您还等什么呢? 成为哈利·波特! 添加您的魔力和创造力,进行自定义,使其更具表现力和令人印象深刻!
Like the presentation I created and looking to make a copy of it and edit according to your requirements? Here is my **[prezi link](https://prezi.com/t23nditffrdy/?utm_campaign=share&utm_medium=copy&rc=ex0share)**. I have kept it ‘*public and reusable*’. Please click the like button before you make a copy of it 🙂 Hope you enjoy this freebie.
像我创建的演示文稿一样,想要复制它并根据您的要求进行编辑吗? 这是我的 [**prezi 链接**](https://prezi.com/t23nditffrdy/?utm_campaign=share&utm_medium=copy&rc=ex0share)。 我将其设置为“*公开且可重复使用*”。 复制副本之前,请先点击“赞”按钮,希望您喜欢这个免费赠品。🙂
在评论部分让我知道您的想法和经验。 即将在我们即将推出的,期待已久的 WebDriver 系列中与您见面!
......@@ -2,7 +2,7 @@
> 原文: [https://javabeginnerstutorial.com/selenium/9a-webdriver-architecture/](https://javabeginnerstutorial.com/selenium/9a-webdriver-architecture/)
学习 WebDriver 的方法很有趣,而且常常使人弯腰,所以请做好准备……在 *Southern Surprises* 的土地上跋涉,我们将遇到一些奇妙,荒唐和古怪的事物。
学习 WebDriver 的方法很有趣,而且常常使人弯腰,所以请做好准备……在*南方惊喜*的土地上跋涉,我们将遇到一些奇妙,荒唐和古怪的事物。
您将发现 Selenium WebDriver 为什么将使您的生活变得如此好-从质量保证的角度来看,以及为什么我们将其称为“统治冠军”! 为了掌握该工具并构建测试自动化框架,对我们正在处理的内容进行更深入的了解非常重要。 那么,我们还等什么呢? 现在让我们开始打好基础!
......@@ -14,9 +14,9 @@
1. 绑定
2. WebDriver API 和
3. 车手
3. 驱动
让我们一次讨论这一步骤。 (*大字警报!***绑定** – 根据 Wikipedia,这意味着将一件事映射到另一件事。 只要记住这两个词,*粘合代码*即可。
让我们一次讨论这一步骤。 (*大字警报!***绑定** – 根据维基百科,这意味着将一件事映射到另一件事。 只要记住这两个词,*粘合代码*即可。
有很多高级编程语言,您可能想使用 C# ,但其他人可能更喜欢 Python。 每个人都希望利用通用的 WebDriver API 来以自己舒适的语言自动化浏览器。 这是语言级别绑定进入图片的地方。 这些就像用相应语言编写的*粘合代码/包装库*与 WebDriver API 进行通信。 除了 Java,C# ,Ruby,Python 绑定外,还有更多。 也很容易添加新的。
......@@ -26,7 +26,7 @@
## 放大并将其放在一起:
在本系列中,我们将使用 Java 编写测试程序。 可以将其视为用于使浏览器自动化的脚本语言。 相应的 Java 绑定代码向 WebDriver API 发出命令。 与浏览器通信的 WebDriver 的所有实现都使用通用的有线协议。 有线协议基本上是基于 HTTP 的 RESTful Web 服务,以“命令”和“响应”的请求/响应对实现。 因此,我们可以将 HTTP 请求(例如 GET,POST,PUT 等)发送到驱动程序服务器。 该服务器是运行 RemoteWebDriver 的计算机。 例如,ChromeDriver 服务器是指直接实现有线协议的 Chrome 浏览器。 运行 Java 测试时,此服务器将侦听并等待这些命令。 它会相应地解释它们,执行低级浏览器活动,然后以 HTTP 响应消息进行响应。
在本系列中,我们将使用 Java 编写测试程序。 可以将其视为用于使浏览器自动化的脚本语言。 相应的 Java 绑定代码向 WebDriver API 发出命令。 与浏览器通信的 WebDriver 的所有实现都使用通用的有线协议。 有线协议基本上是基于 HTTP 的 RESTful Web 服务,以“命令”和“响应”的请求/响应对实现。 因此,我们可以将 HTTP 请求(例如 GET,POST,PUT 等)发送到驱动程序服务器。 该服务器是运行远程 WebDriver 的计算机。 例如,Chrome 驱动服务器是指直接实现有线协议的 Chrome 浏览器。 运行 Java 测试时,此服务器将侦听并等待这些命令。 它会相应地解释它们,执行低级浏览器活动,然后以 HTTP 响应消息进行响应。
## 缩小:
......
......@@ -7,8 +7,8 @@
## 先决条件:
1. 拥有有效的互联网连接。
2. 在系统上下载并安装 Java SE Development Kit(JDK)。 (http://www.oracle.com/technetwork/java/javase/downloads/index.html
3. 下载 Eclipse IDE。 不需要安装。 只需将所有内容提取到一个文件夹中,然后双击可执行文件即可。 (http://www.eclipse.org/downloads/
2. 在系统上下载并安装 Java SE Development Kit(JDK)。 (<http://www.oracle.com/technetwork/java/javase/downloads/index.html>
3. 下载 Eclipse IDE。 不需要安装。 只需将所有内容提取到一个文件夹中,然后双击可执行文件即可。 (<http://www.eclipse.org/downloads/>
是时候按照 3 个步骤来设置环境了,
......@@ -22,7 +22,7 @@
将下载的文件解压缩到系统上所需的位置。 切换到 Eclipse 并选择所需的工作空间目录。
创建一个新的 Java 项目,如下所示:File-> new-> Java Project。 我已将项目命名为“WebDriver 测试”。
创建一个新的 Java 项目,如下所示:“文件 -> 新建 -> Java 项目”。 我已将项目命名为“WebDriver 测试”。
### 步骤 3:
......@@ -34,9 +34,9 @@
## 方法 1:
确保已选择“库”标签。 单击“添加外部 JAR ...”按钮。 “JAR 选择”窗口将打开。 浏览至 seleniumhq.org 站点(Selenium Client 和 WebDriver 语言绑定)中的文件的下载和提取位置。
确保已选择“库”标签。 单击“添加外部 JAR ...”按钮。 “JAR 选择”窗口将打开。 浏览至 seleniumhq.org 站点(Selenium 客户端和 WebDriver 语言绑定)中的文件的下载和提取位置。
确保选择所有类型为“可执行 Jar 文件”的文件。 目前,我在“selenium-java-3.0.0-beta2”文件夹中有一个文件,在 selenium-java-3.0.0-beta2 \ lib 文件夹中有 16 个文件。
确保选择所有类型为“可执行 Jar 文件”的文件。 目前,我在“`selenium-java-3.0.0-beta2`”文件夹中有一个文件,在`selenium-java-3.0.0-beta2\lib`文件夹中有 16 个文件。
点击“打开”,将它们添加到“库”标签中。
......@@ -54,9 +54,9 @@
![User library custom name](img/cecbd5cf7bdbab42d44db3cebb5143d1.png)
单击“添加外部 JAR ...”按钮。 “JAR 选择”窗口将打开。 浏览至 seleniumhq.org 站点(Selenium Client 和 WebDriver 语言绑定)中的文件的下载和提取位置。
单击“添加外部 JAR ...”按钮。 “JAR 选择”窗口将打开。 浏览至 seleniumhq.org 站点(Selenium 客户端和 WebDriver 语言绑定)中的文件的下载和提取位置。
Make sure that you select all the files with type, ‘Executable Jar File’.  Currently I have one file in ‘selenium-java-3.0.0-beta2’ folder and 16 files in selenium-java-3.0.0-beta2\lib folder.
确保选择所有类型为“可执行 Jar 文件”的文件。 目前,我在“`selenium-java-3.0.0-beta2`”文件夹中有一个文件,在`selenium-java-3.0.0-beta2\lib`文件夹中有16个文件。
点击“打开”,将它们添加到“用户库”窗口下创建的文件夹中。 点击“确定”,现在您将在“添加库”窗口中看到带有复选框的用户库。 确保选中此复选框,然后单击“完成”。 创建的用户库将在项目属性窗口的“库”选项卡中提供所有添加的外部 JAR。
......@@ -74,7 +74,7 @@ Make sure that you select all the files with type, ‘Executable Jar File’. 
![set up - gecko driver](img/ea1465c979004461a1cb631d319582fe.png)
* *编写测试脚本时,请确保包括以下行(还要确保系统中的 Firefox 浏览器版本为 48+)*
* *编写测试脚本时,请确保包括以下行(还要确保系统中的 Firefox 浏览器版本为 48+)*
```java
System.setProperty("webdriver.gecko.driver", "<path_to_geckodriver.exe>");
......
......@@ -2,11 +2,11 @@
> 原文: [https://javabeginnerstutorial.com/selenium/9c-webdriver-first-test-script-firefox/](https://javabeginnerstutorial.com/selenium/9c-webdriver-first-test-script-firefox/)
嗨呀everyone! Time to grab a cup of Java, I mean coffee 😉
嗨呀大家! 是时候喝杯 Java 了,我是说咖啡😉
事不宜迟,让我们开始使用 WebDriver 中的第一个测试脚本。 在我们根据[上一篇文章](https://javabeginnerstutorial.com/selenium/9b-webdriver-eclipse-setup/)(添加了 WebDriver JAR 文件)创建的同一项目下,我创建了一个名为 com.blog.tests 的新程序包。
事不宜迟,让我们开始使用 WebDriver 中的第一个测试脚本。 在我们根据[上一篇文章](https://javabeginnerstutorial.com/selenium/9b-webdriver-eclipse-setup/)(添加了 WebDriver JAR 文件)创建的同一项目下,我创建了一个名为`com.blog.tests`的新程序包。
接下来,右键单击包-> New-> Class
接下来,右键单击“包 -> 新建 -> 类”
![Test Script - Class Creation](img/332fd01782c08929069b72cf2741b325.png)
......@@ -17,12 +17,12 @@
我们将在第一个测试脚本中考虑的场景是:
1. 打开 Firefox 浏览器。
2. 导航到“https://www.google.com/
2. 导航到“<https://www.google.com/>
3. 将页面标题声明为“Google”。
4. 根据声明结果在控制台上显示一条消息。
5. 关闭浏览器。
**注意* ***我们有一整篇文章专门用于声明和验证。 由于第一个脚本的主要座右铭是查看 WebDriver 的工作原理,因此让我们使用简单的 if-else 语句来比较实际和预期的页面标题。*
**注意***我们有一整篇文章专门用于声明和验证。 由于第一个脚本的主要座右铭是查看 WebDriver 的工作原理,因此让我们使用简单的 if-else 语句来比较实际和预期的页面标题。*
**代码如下,**
......@@ -73,7 +73,7 @@ System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\Selenium\\
geckodriver-v0.10.0-win64\\geckodriver.exe");
```
Selenium 3 Beta 版本不像 Selenium 2\. *版本那样支持直接启动 Firefox。 因此,必须通过“webdriver.gecko.driver”系统属性设置驱动程序可执行文件“geckodriver.exe”的路径。 指定在系统中相应保存可执行文件的路径。
Selenium 3 Beta 版本不像 Selenium 2 版本那样支持直接启动 Firefox。 因此,必须通过“`webdriver.gecko.driver`”系统属性设置驱动程序可执行文件“`geckodriver.exe`”的路径。 指定在系统中相应保存可执行文件的路径。
#### 2.接下来,为了实例化 Firefox 浏览器,我们将必须导入两个包。
......@@ -87,25 +87,25 @@ Selenium 3 Beta 版本不像 Selenium 2\. *版本那样支持直接启动 Firefo
import org.openqa.selenium.WebDriver
```
**注意:** *我们**不要**说,* *WebDriver* *驱动程序* *=* **新的** *WebDriver();* *因为 WebDriver 是一个接口,并且只包含已定义但未实现的空方法。 因此无法实例化。*
**注意**:我们**不要**说,`WebDriver* driver = new WebDriver();`,因为`WebDriver`是一个接口,并且只包含已定义但未实现的空方法。 因此无法实例化。
* FirefoxDriver 是特定于 Firefox 浏览器的类。 它具有根据接口 WebDriver 定义和实现的方法。 因此,这可以实例化。
* `FirefoxDriver`是特定于 Firefox 浏览器的类。 它具有根据接口`WebDriver`定义和实现的方法。 因此,这可以实例化。
```java
import org.openqa.selenium.firefox.FirefoxDriver
```
因此,以下声明有点像我们的甘道夫。 (不要告诉我您还没有阅读或观看“指环王”系列!!)SeleniumVille 历来最强大,最受尊敬的台词。 因为它为 FirefoxDriver 类创建了一个对象。 现在,根据 WebDriver 接口的约定,通过调用 FirefoxDriver 类中已经实现的方法,我们现在可以使用此对象(在这种情况下为“驱动程序”)自动执行 Firefox 浏览器上的各种操作。
因此,以下声明有点像我们的甘道夫。 (不要告诉我您还没有阅读或观看“指环王”系列!!)SeleniumVille 历来最强大,最受尊敬的台词。 因为它为`FirefoxDriver`类创建了一个对象。 现在,根据`WebDriver`接口的约定,通过调用`FirefoxDriver`类中已经实现的方法,我们现在可以使用此对象(在这种情况下为“驱动程序”)自动执行 Firefox 浏览器上的各种操作。
```java
WebDriver driver = new FirefoxDriver();
```
将启动的 Firefox 浏览器将具有默认配置文件。 它不会随 Firefox 实例一起加载任何扩展程序和插件,并且会在安全模式下运行。 如果您想了解有关 Firefox 配置文件的更多信息,请访问“https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data”。
将启动的 Firefox 浏览器将具有默认配置文件。 它不会随 Firefox 实例一起加载任何扩展程序和插件,并且会在安全模式下运行。 如果您想了解有关 Firefox 配置文件的更多信息,请访问“<https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data>”。
同样,对于其他浏览器(例如 Chrome,IE,Safari 等),我们按照 WebDriver 接口中指定的相同协定(即,实现接口中定义的方法)编写特定的类。 在下一篇文章中,我们将通过特定示例了解如何使用其他浏览器。
同样,对于其他浏览器(例如 Chrome,IE,Safari 等),我们按照`WebDriver`接口中指定的相同协定(即,实现接口中定义的方法)编写特定的类。 在下一篇文章中,我们将通过特定示例了解如何使用其他浏览器。
#### 3.现在,声明 String 类型的必要变量。
#### 3.现在,声明`String`类型的必要变量。
```java
String baseUrl = "https://www.google.com";
......@@ -113,7 +113,7 @@ String pageTitle = "";
String expectedTitle = "Google";
```
我猜很简单,自我解释。 我们只是声明 String 类型的变量并为其分配值。 `baseUrl`是我们希望在 Firefox 浏览器窗口中为测试场景调用的 URL。 目前,`pageTitle`保持为空,因为这将是我们将从浏览器中获取的实际值。 `ExpectedTitle`是将与实际值进行比较的期望值。
我猜很简单,自我解释。 我们只是声明`String`类型的变量并为其分配值。 `baseUrl`是我们希望在 Firefox 浏览器窗口中为测试场景调用的 URL。 目前,`pageTitle`保持为空,因为这将是我们将从浏览器中获取的实际值。 `ExpectedTitle`是将与实际值进行比较的期望值。
#### 4.导航到 Google 页面。
......@@ -121,7 +121,7 @@ String expectedTitle = "Google";
driver.get(baseUrl);
```
这是我们要做的第一件事。 “获取”方法用于导航到指定的 URL。 在这种情况下为 [https://www.google.com](https://www.google.com)
这是我们要做的第一件事。 “`get`”方法用于导航到指定的 URL。 在这种情况下为 [https://www.google.com](https://www.google.com)
**注意**`driver.navigate().to(baseUrl)`也达到相同的结果。 试试看!
......@@ -131,7 +131,7 @@ driver.get(baseUrl);
pageTitle = driver.getTitle();
```
页面标题的实际值可以使用 getTitle()方法获得。 然后将标题保存到变量 pageTitle 中,以供进一步声明。
页面标题的实际值可以使用`getTitle()`方法获得。 然后将标题保存到变量`pageTitle`中,以供进一步声明。
#### 6.比较页面标题并在控制台中显示结果。
......@@ -143,7 +143,7 @@ if(pageTitle.equals(expectedTitle)){
}
```
检查存储在 pageTitle 中的实际值是否等于辅助值的期望值。 System.out.println()打印指定的参数和换行符。 这里只是纯 Java!
检查存储在`pageTitle`中的实际值是否等于辅助值的期望值。 `System.out.println()`打印指定的参数和换行符。 这里只是纯 Java!
#### 7.关闭浏览器窗口。
......@@ -151,7 +151,7 @@ if(pageTitle.equals(expectedTitle)){
driver.quit();
```
quit()方法关闭所有浏览器窗口,并完全结束 WebDriver 会话。 这样可以避免在未正确清除任何相关文件的情况下可能发生的内存泄漏。
`quit()`方法关闭所有浏览器窗口,并完全结束 WebDriver 会话。 这样可以避免在未正确清除任何相关文件的情况下可能发生的内存泄漏。
**注意**`driver.close()`也可以使用。 不同之处在于,它将关闭当前关注的浏览器窗口。
......
......@@ -7,8 +7,8 @@
Eclipse 使我们能够通过 3 种方式来完成相同的任务,
* **方法 1**:单击 Eclipse 中的“运行”快捷方式图标。
* **方法 2**:右键单击类文件,运行方式-> Java 应用
* **方法 3**:使用组合键 CTRL + F11
* **方法 2**:右键单击“类文件,运行方式 -> Java 应用”
* **方法 3**:使用组合键`CTRL + F11`
![Test execution](img/c351fb5a9a535fca616a318ec05a50be.png)
......
......@@ -6,7 +6,7 @@
哦,不要惊慌! 我们的统治冠军 WebDriver 在这里为我们提供帮助。 这是我们今天的主题。 让我们潜入吧!
**第 1 步**:首先! 让我们下载所需的可执行文件。 转到“www.seleniumhq.org/download”。
**第 1 步**:首先! 让我们下载所需的可执行文件。 转到“`www.seleniumhq.org/download`”。
* `InternetExplorerDriver`在“Internet Explorer 驱动程序服务器”部分下可用。
* `ChromeDriver``OperaDriver``SafariDriver`位于“第三方浏览器驱动程序”部分下。
......@@ -15,9 +15,9 @@
![Browser download](img/10655a5d16771e9ca93d13474f7932c7.png)
**步骤 2**:下载可执行文件后,解压缩并将它们保存在所需的路径中。 我在 Eclipse IDE 的项目中创建了一个名为“浏览器驱动程序”的文件夹(右键单击包->新建->文件夹),并复制了下载的文件以便于访问。
**步骤 2**:下载可执行文件后,解压缩并将它们保存在所需的路径中。 我在 Eclipse IDE 的项目中创建了一个名为“浏览器驱动程序”的文件夹(右键单击“包 -> 新建 -> 文件夹”),并复制了下载的文件以便于访问。
**步骤 3**:现在,让我们通过“右键单击包-> New-> Class”并将它们命名为“`HelloWorld_IE.java`”,创建两个新类。 和“`HelloWorld_Chrome.java`”。
**步骤 3**:现在,让我们通过右键单击“包-> 新建 -> 类”并将它们命名为“`HelloWorld_IE.java`”,创建两个新类。 和“`HelloWorld_Chrome.java`”。
包浏览器窗格现在如下所示,
......@@ -26,8 +26,8 @@
让我们考虑一个非常简单的情况,因为我们的主要目标是查看是否可以启动 IE 和 Chrome 浏览器,
1. 根据测试用例打开 IE / Chrome 浏览器。
2. 导航到“https://www.google.com/
3. 在控制台中显示“Hello World”消息。
2. 导航到“<https://www.google.com/>
3. 在控制台中显示“`Hello World”`消息。
4. 关闭浏览器。
**首先让我们看看“`HelloWorld_IE.java`”类的代码**
......@@ -66,7 +66,7 @@ public class HelloWorld_IE {
System.setProperty("webdriver.ie.driver", "browser-drivers\\IEDriverServer.exe");
```
要求驱动程序可执行文件“IEDriverServer.exe”的路径必须由“webdriver.ie.driver”系统属性设置。 指定在系统中相应保存可执行文件的路径。
要求驱动程序可执行文件“`IEDriverServer.exe`”的路径必须由“`webdriver.ie.driver`”系统属性设置。 指定在系统中相应保存可执行文件的路径。
为了实例化 IE 浏览器,需要进行的另一项主要更改是,
......@@ -74,14 +74,14 @@ System.setProperty("webdriver.ie.driver", "browser-drivers\\IEDriverServer.exe")
WebDriver driver = new InternetExplorerDriver();
```
键入此语句后,“WebDriver”和“InternetExplorerDriver()”下方会出现一条波浪线。 悬停时,日食将建议所有可能的快速修复。 单击建议导入相应程序包的第一个修复程序。
键入此语句后,“`WebDriver`”和“`InternetExplorerDriver()`”下方会出现一条波浪线。 悬停时,日食将建议所有可能的快速修复。 单击建议导入相应程序包的第一个修复程序。
```java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
```
根据提供的注释,以下代码看起来很不言自明。 IE 浏览器启动后,它便导航到 google 页面,将“Hello World”消息打印到控制台并关闭浏览器窗口。
根据提供的注释,以下代码看起来很不言自明。 IE 浏览器启动后,它便导航到 google 页面,将“`Hello World`”消息打印到控制台并关闭浏览器窗口。
执行此测试后的控制台窗口如下所示,
......@@ -115,10 +115,10 @@ public class HelloWorld_Chrome {
}
```
如果将此代码与“HelloWorld_IE.java”进行比较,则只有两个值得注意的变化。
如果将此代码与“`HelloWorld_IE.java`”进行比较,则只有两个值得注意的变化。
1. 系统属性设置
2. ChromeDriver 类实例化
2. `ChromeDriver`类实例化
因此,我们可以得出结论,通过指定相应的系统属性并提供准确的驱动程序类实例化,可以借助 WebDriver 轻松启动和自动化相应的浏览器。
......
......@@ -16,8 +16,8 @@
以下几点将使该过程更加容易理解,
1. 您将被重定向到 GitHub。 在“普通的 JAR”下,可以使用 junit 和 hamcrest-core 罐子
2. 点击“junit.jar”会将您重定向到包含下载链接的页面。 点击最新版本的“jar”链接(撰写本文时为 v4.12)。 它将自动下载到您的系统。
1. 您将被重定向到 GitHub。 在“普通的 JAR”下,可以使用 junit 和 hamcrest-core JAR
2. 点击“`junit.jar`”会将您重定向到包含下载链接的页面。 点击最新版本的“jar”链接(撰写本文时为 v4.12)。 它将自动下载到您的系统。
3. 接下来,点击“hamcrest-core.jar”。 与上述类似,单击最新的“jar”下载链接(截至本帖子发布之日起为 v1.3)。
4. 这样,两个必需的 jar 都立即下载到您的系统中。
......@@ -35,11 +35,11 @@
4. 选择“用户库”->接下来->单击“用户库...”
5. 单击“新建...”,并为库“JUnit4”命名,然后单击“确定”。
6. 在“用户库”弹出窗口中,确保选择了新创建的 Junit4 库。 点击“添加外部 JAR ...”
7. 导航到本地系统中下载的与 junit 相关的 jar 的保存路径。 选择 junit 和 hamcrest-core 罐子,然后单击“打开”
7. 导航到本地系统中下载的与 junit 相关的 jar 的保存路径。 选择 junit 和 hamcrest-core JAR,然后单击“打开”
![Junit user library](img/5318192c9c52bb98d287d05ae4b99628.png)
相应地单击 OK 和 Finish 按钮,新创建的 JUnit4 库将添加到项目构建路径,如下所示,
相应地单击 OK 和“完成”按钮,新创建的 JUnit4 库将添加到项目构建路径,如下所示,
![Junit jars added](img/5fce1a98eaa6e98717f5e7813ae4307d.png)
......
......@@ -6,16 +6,16 @@
您准备好将帽子戴上戒指了吗? 如果是,那就开始吧!
展望未来,我们所有的测试都将使用 JUnit 框架。 因此,是时候通过右键单击项目(已设置 Selenium 和 junit)创建新程序包了->新建->程序包。 我已将程序包命名为“com.blog.junitTests”。
展望未来,我们所有的测试都将使用 JUnit 框架。 因此,是时候通过右键单击“项目->新建->程序包”(已设置 Selenium 和 junit)创建新程序包了。 我已将程序包命名为“`com.blog.junitTests`”。
我们的下一步是创建一个类。 右键单击新创建的包-> New-> Class。 给它起一个名字“FirstJunitTest.java”,然后单击“完成”。 您的 IDE 现在看起来应该与此类似,
我们的下一步是创建一个类。 右键单击“新创建的包 -> 新建 -> 类”。 给它起一个名字“`FirstJunitTest.java`”,然后单击“完成”。 您的 IDE 现在看起来应该与此类似,
![JUnit implementation](img/ac2ffc78ad525227b36a8a3fa84ed450.png)
现在我们已经准备好上课的文件了,让我们采用与“[**第一个测试脚本 – 通过启动 Firefox**](https://javabeginnerstutorial.com/selenium/9c-webdriver-first-test-script-firefox/)”帖子中相同的方案。
1. 打开 Firefox 浏览器。
2. 导航到“https://www.google.com/
2. 导航到“<https://www.google.com/>
3. 将页面标题声明为“Google”。
4. 根据声明结果在控制台上显示一条消息。
5. 关闭浏览器。
......@@ -79,8 +79,8 @@ public class FirstJunitTest {
如果将此代码与实现 JUnit 之前的代码进行比较,将会有明显的变化,
1. 注释:@ Before,@ Test 和@After
2. 方法:setUp(),testPageTitle(),tearDown()
1. 注释:`@Before``@Test``@After`
2. 方法:`setUp()``testPageTitle()``tearDown()`
3. 类开头的私有变量声明
4. 在新创建的方法下,将相同的代码分为几部分
......@@ -92,17 +92,17 @@ public class FirstJunitTest {
**`@Before`** – 在指定的每种测试方法之前运行。 这用于各种目的。 读取或分配数据,初始化或如果多个测试需要先创建相似的对象才能执行,则最好在之前注释的方法下进行指定。
**`@After`** – 在执行每种测试方法之后运行。 通常,会指定与环境清理相关的命令,例如,关闭打开的资源/数据库连接,删除临时数据,释放内存等。即使@Before 或@Test 方法引发异常,也可以保证运行带 after 注释的方法。
**`@After`** – 在执行每种测试方法之后运行。 通常,会指定与环境清理相关的命令,例如,关闭打开的资源/数据库连接,删除临时数据,释放内存等。即使`@Before``@Test`方法引发异常,也可以保证运行带`after`注释的方法。
键入这些注释,在它们下方会出现一条弯曲的线。 悬停时,日食将建议所有可能的快速修复。 单击建议导入`org.junit`程序包的第一个修复程序。
![JUnit import packages](img/ce8da4202841e9f631539ef66816bcfb.png)
在这三个注释下的**方法***公开的*,返回类型为`void`。 在`junit.framework.TestCase`类下,我们有`setUp()``tearDown()`方法。 最佳实践是覆盖这些方法,以分别编写初始化代码和清除代码。 这不仅可以防止内存泄漏,还可以使代码更易于阅读。 JUnit 首先调用 setUp()方法,然后调用 test 方法,最后调用 tearDown()方法。 对于附加到@Test 的每个测试方法,都会发生这种情况。
在这三个注释下的**方法***公开的*,返回类型为`void`。 在`junit.framework.TestCase`类下,我们有`setUp()``tearDown()`方法。 最佳实践是覆盖这些方法,以分别编写初始化代码和清除代码。 这不仅可以防止内存泄漏,还可以使代码更易于阅读。 JUnit 首先调用`setUp()`方法,然后调用`test`方法,最后调用`tearDown()`方法。 对于附加到`@Test`的每个测试方法,都会发生这种情况。
#### 要运行测试,
右键单击类->运行方式-> JUnit 测试
右键单击“类 -> 运行方式 -> JUnit 测试”
![JUnit4 test execution](img/61ab82ac961722bbfc27358cad1b2faf.png)
......
......@@ -14,7 +14,7 @@
### 隐式等待
了解我们使用 findElement 或 findElements 命令在 WebDriver 中定位 Web 元素非常重要(后面的文章将详细介绍该主题以及各种定位策略)。 因此,当尝试在页面上查找特定的 Web 元素时,如果该 Web 元素不是立即可用的,则隐式等待告诉 WebDriver 在指定的时间内轮询 DOM。 万一在指定的等待时间内找到该元素,测试将继续执行。 如果不是,则抛出 NoSuchElementException
了解我们使用`findElement``findElements`命令在 WebDriver 中定位 Web 元素非常重要(后面的文章将详细介绍该主题以及各种定位策略)。 因此,当尝试在页面上查找特定的 Web 元素时,如果该 Web 元素不是立即可用的,则隐式等待告诉 WebDriver 在指定的时间内轮询 DOM。 万一在指定的等待时间内找到该元素,测试将继续执行。 如果不是,则抛出`NoSuchElementException`
下面是带有隐式等待命令的代码片段,以使您更好地理解,
......@@ -41,16 +41,16 @@
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
```
隐式等待有两个参数。 在此示例中,我们的第一个参数为 **3** ,这是它必须等待的时间,第二个参数为`TimeUnit.SECONDS`。 这是时间测量。 可以指定为 DAYS,HOURS,MINUTES,SECONDS,MILLISECONDS,MICROSECONDS,NANOSECONDS 等。
隐式等待有两个参数。 在此示例中,我们的第一个参数为 **3** ,这是它必须等待的时间,第二个参数为`TimeUnit.SECONDS`。 这是时间测量。 可以指定为`DAYS``HOURS``MINUTES``SECONDS``MILLISECONDS``MICROSECONDS``NANOSECONDS`等。
此外,在键入此语句时,“TimeUnit”下方会出现一条弯曲的线。 悬停时,蚀将建议所有可能的快速修复。 单击建议导入`java.util.concurrent.TimeUnit`包的第一个修复程序。
此外,在键入此语句时,“`TimeUnit`”下方会出现一条弯曲的线。 悬停时,蚀将建议所有可能的快速修复。 单击建议导入`java.util.concurrent.TimeUnit`包的第一个修复程序。
1. 隐式等待只需要初始化一次。 设置后,它将适用于 WebDriver 对象实例的寿命。 换句话说,它将在浏览器打开的整个过程中就位。 因此,WebDriver 将等待该额外时间,然后对所有 [findElement](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElement(org.openqa.selenium.By)) 和 [findElements](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElements(org.openqa.selenium.By)) 抛出异常
1. 隐式等待只需要初始化一次。 设置后,它将适用于`WebDriver`对象实例的寿命。 换句话说,它将在浏览器打开的整个过程中就位。 因此,WebDriver 将等待该额外时间,然后对所有[`findElement`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElement(org.openqa.selenium.By))和[`findElements`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElements(org.openqa.selenium.By))抛出异常
2. 默认时间设置为 0。
3. 隐式等待仅影响 finddElement(s),它不影响其他 WebDriver 方法,例如 driver.getCurrentUrl()等。
4. 在大多数情况下,尤其是在调试时,仅“NoSuchElementException”并不是很有用。 我们可能希望使用更多信息来自定义此错误消息,例如捕获屏幕快照或添加更多详细信息等。可以通过在每次 findElement(s)调用周围使用 try-catch 块来实现此目的,但这不是我们使用隐式等待的目标 因为这是一个全球性的时间设置。
5. 由于有大量的 JavaScript,因此可能会出现一些奇怪的情况。 即使该元素位于 DOM 中,也可能无法立即单击或显示或启用它。 结果我们可能会看到[`ElementNotVisibleException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/ElementNotVisibleException.html)[*`WebDriverException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverException.html)[`StaleElementReferenceException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/StaleElementReferenceException.html)
6. 由于不同的元素可能在不同的时间加载,因此我们可能会说服将等待时间设置为较高的值(或等效于最慢的 Web 元素的加载时间),例如 20 秒左右。 我们对此的理由是,“无论如何,所有元素的加载速度都将比此时快,并且测试将按预期进行。” 但是您甚至猜不到**性能**-这种方法不是一个好主意吗? 我在这里给您举几个例子,以便更好地了解,
3. 隐式等待仅影响`finddElement(s)`,它不影响其他`WebDriver`方法,例如`driver.getCurrentUrl()`等。
4. 在大多数情况下,尤其是在调试时,仅“`NoSuchElementException`”并不是很有用。 我们可能希望使用更多信息来自定义此错误消息,例如捕获屏幕快照或添加更多详细信息等。可以通过在每次`finddElement(s)`调用周围使用`try-catch`块来实现此目的,但这不是我们使用隐式等待的目标 因为这是一个全球性的时间设置。
5. 由于有大量的 JavaScript,因此可能会出现一些奇怪的情况。 即使该元素位于 DOM 中,也可能无法立即单击或显示或启用它。 结果我们可能会看到[`ElementNotVisibleException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/ElementNotVisibleException.html)[`WebDriverException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverException.html)[`StaleElementReferenceException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/StaleElementReferenceException.html)
6. 由于不同的元素可能在不同的时间加载,因此我们可能会说服将等待时间设置为较高的值(或等效于最慢的 Web 元素的加载时间),例如 20 秒左右。 我们对此的理由是,“无论如何,所有元素的加载速度都将比此时快,并且测试将按预期进行。” 但是您甚至猜不到**性能** - 这种方法不是一个好主意吗? 我在这里给您举几个例子,以便更好地了解,
**情况 1**:如果希望找到一个元素,但无论结果如何,都可以继续进行测试。
......
......@@ -13,7 +13,7 @@ WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("element_id")));
```
因此,WebDriverWait 类用于指定最大超时值,在这种情况下为 15 秒。 ExpectedCondition 类的方法涵盖了我们希望在测试中出现之前要等待的大多数条件。 这些条件与 WebDriverWait 一起使用。
因此,`WebDriverWait`类用于指定最大超时值,在这种情况下为 15 秒。 `ExpectedCondition`类的方法涵盖了我们希望在测试中出现之前要等待的大多数条件。 这些条件与`WebDriverWait`一起使用。
上面的代码一直等到元素变为可点击(即显示并启用)并返回结果。 默认情况下,WebDriverWait 每 500 毫秒调用 ExpectedCondition,直到成功返回。 在这种情况下,它会在抛出 TimeoutException 之前尝试长达 15 秒。 成功的返回值是布尔值 true 或非 null 对象。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册