提交 86a643e4 编写于 作者: W wizardforcel

2020-06-23 15:23:04

上级 9a999ad6
......@@ -6,13 +6,13 @@
我想借此机会向您介绍另一个出色的 BrainBell。
***BrainBell*** – *想想!* 不要仿佛错过了航班。 暂停,思考和思考。 您越用脑去思考,您就会越记得。
**BrainBell***想想!* 不要仿佛错过了航班。 暂停,思考和思考。 您越用脑去思考,您就会越记得。
戴上 *FeatureBelt* 。 也就是说,到目前为止,您已经在 Selenium IDE 中学习了有关功能的所有新技能。 **您**(是的,您没听错!您)现在将所有内容放在一起,并针对您自己的不同场景创建新的测试用例。 如果您在执行过程中遇到任何问题,请在评论部分给我大喊。
戴上 *FeatureBelt*。 也就是说,到目前为止,您已经在 Selenium IDE 中学习了有关功能的所有新技能。 **您**(是的,您没听错!您)现在将所有内容放在一起,并针对您自己的不同场景创建新的测试用例。 如果您在执行过程中遇到任何问题,请在评论部分给我大喊。
我们涵盖了很多领域; 您几乎已经到达 *Magic Meadows 的边界。*
我们涵盖了很多领域; 您几乎已经到达*魔法草原的边界*
下一个是什么? ***现在该到南方旅行了!***
下一个是什么? **现在该到南方旅行了!**
随时在评论部分中发表您的想法和澄清。 祝您有美好的一天。
......@@ -18,30 +18,30 @@
该视频首先向您展示演示的整体情况。 我们的大脑更喜欢视觉而不是文字。 因此,始终要畅所欲言,并在幻灯片上显示相关图像,而不是数百个单词,这始终是一个好习惯。
* *幻灯片 1:* 'WOW'。 用**爆炸**打开演示文稿! 首先要引起您对样式的“迷恋”。 可能是*现实生活中的事件,假想的场景,发人深省的报价或问题*
* *幻灯片 1* 'WOW'。 用**爆炸**打开演示文稿! 首先要引起您对样式的“迷恋”。 可能是*现实生活中的事件,假想的场景,发人深省的报价或问题*
* *幻灯片 2:* 面临的挑战。 简单介绍一下我们在没有自动化的情况下面临的挑战/问题。 允许客户**考虑**。 这也应该作为介绍的介绍。 例如,显示简单场景的图形。 对于每个发行版,测试用例数量都会增加(回归套件+发行用例),从而增加了总体开发成本。 这最终减少了产品的上市时间,这可能会对总收入/销售额造成重大打击。
* *幻灯片 2* 面临的挑战。 简单介绍一下我们在没有自动化的情况下面临的挑战/问题。 允许客户**考虑**。 这也应该作为介绍的介绍。 例如,显示简单场景的图形。 对于每个发行版,测试用例数量都会增加(回归套件+发行用例),从而增加了总体开发成本。 这最终减少了产品的上市时间,这可能会对总收入/销售额造成重大打击。
* *幻灯片 3:* 现在是时候在他们的脑海中植入**创意**了。 引入**Selenium**
* *幻灯片 3* 现在是时候在他们的脑海中植入**创意**了。 引入**Selenium**
* *幻灯片 4:* 高亮显示 2 至 3 个关键点。 “ **FREE** ”是当今的流行语,因为客户担心金钱和数字。 现在,您甚至可以在他们的脸上看到微笑。
* *幻灯片 4*: 高亮显示 2 至 3 个关键点。 “**FREE**”是当今的流行语,因为客户担心金钱和数字。 现在,您甚至可以在他们的脸上看到微笑。
* *幻灯片 5:* 简要介绍 Selenium Suite 的**概述**,涵盖每分钟工具。 切记不要听起来太技术性,并尽量避免使用专业术语。
* *幻灯片 5* 简要介绍 Selenium Suite 的**概述**,涵盖每分钟工具。 切记不要听起来太技术性,并尽量避免使用专业术语。
* *幻灯片 6:* 讨论**优势**。 这些内容应涵盖幻灯片 2 中突出显示的挑战。请保持内容的吸引力。
* *幻灯片 6* 讨论**优势**。 这些内容应涵盖幻灯片 2 中突出显示的挑战。请保持内容的吸引力。
* *幻灯片 7:* 谢谢。 现在是时候总结“ **要点**”并用**结束“钩子”** 结束演示的时候了。 您可以使用*讲义,轶事,演示,音频/视频效果,助记符和标语*最好将其链接到开幕式!
* *幻灯片 8:* **问题**。 花一些时间来澄清客户之间可能出现的疑问或疑虑,并确保他们带着满意的表情离开房间。
* *幻灯片 7*: 谢谢。 现在是时候总结“**要点**”并用**结束“钩子”**结束演示的时候了。 您可以使用*讲义,轶事,演示,音频/视频效果,助记符和标语*最好将其链接到开幕式!
* *幻灯片 8* **问题**。 花一些时间来澄清客户之间可能出现的疑问或疑虑,并确保他们带着满意的表情离开房间。
## 提示:
* 带着**微笑**出现。
* 合适的**衣服** – 必须穿着舒适,整洁的衣服。
* **肢体语言** – 避免将手放在口袋中或握在固定装置上,在讲话时以轻微的身体移动或手势来表达您的感觉。
* 取悦**语音** – 使用适当的调制,在必要时重复,请尽量减少使用 uh,um 等填充物,实际上,您知道等等。
* 动听的**声音** – 使用适当的调制,在必要时重复,请尽量减少使用 uh,um 等填充物,实际上,您知道等等。
* **传送信息的速度**也起着重要作用。
* **眼神交流** – 使用眼动横扫听众,营造出个人化注意力的印象。
* 最重要的是:说话时,请勿在投影**的前面挡住**的视图。
* 最重要的是:说话时,请勿在**前面挡住**投影的视图。
如果您遵循我在这篇文章中提到的大部分内容,则一定会留下您的印记。
......
......@@ -16,7 +16,7 @@
2. WebDriver API 和
3. 车手
让我们一次讨论这一步骤。 *大字警报!* **绑定** – 根据 Wikipedia,这意味着将一件事映射到另一件事。 只要记住这两个词,*粘合代码*即可。
让我们一次讨论这一步骤。 *大字警报!***绑定** – 根据 Wikipedia,这意味着将一件事映射到另一件事。 只要记住这两个词,*粘合代码*即可。
有很多高级编程语言,您可能想使用 C# ,但其他人可能更喜欢 Python。 每个人都希望利用通用的 WebDriver API 来以自己舒适的语言自动化浏览器。 这是语言级别绑定进入图片的地方。 这些就像用相应语言编写的*粘合代码/包装库*与 WebDriver API 进行通信。 除了 Java,C# ,Ruby,Python 绑定外,还有更多。 也很容易添加新的。
......@@ -30,7 +30,7 @@
## 缩小:
语言级别绑定(发出命令)**->** WebDriver 通用有线协议(基于 HTTP 的基于 REST 的 Web 服务)**->** 驱动程序服务器(解释 HTTP 请求并以 HTTP 响应进行响应 讯息
语言级别绑定(发出命令)**->** WebDriver 通用有线协议(基于 HTTP 的基于 REST 的 Web 服务)**->** 驱动程序服务器(解释 HTTP 请求并以 HTTP 响应来响应消息
如果您没有获得完整的图像,请不要惊慌。 休息片刻,因为有很多帖子可以跟进,随着我们的前进,您一定会获得清晰的了解。
......
......@@ -66,15 +66,15 @@ Make sure that you select all the files with type, ‘Executable Jar File’. 
![Eclipse package explorer](img/47b2fc334fea0ad2428f1895376e5580.png)
***即时贴:*** *(这只是告诉您做一个注释)*
**即时贴***(这只是告诉您做一个注释)*
*此设置可与 Selenium 2 版本完美配合(我已经使用了很长时间了,一切都很好)。 但是,如果您使用的是 Selenium 3 beta 版本(如上面的屏幕快照所示),则需要执行一些其他步骤。*
* *从“ https://github.com/mozilla/geckodriver/releases”下载“ geckodriver.exe”。*
* *从“<https://github.com/mozilla/geckodriver/releases>”下载“`geckodriver.exe`”。*
![set up - gecko driver](img/ea1465c979004461a1cb631d319582fe.png)
* *编写测试脚本时,请确保包括以下行(还要确保系统中的 Firefox 浏览器版本为 48 +),*
* *编写测试脚本时,请确保包括以下行(还要确保系统中的 Firefox 浏览器版本为 48+),*
```java
System.setProperty("webdriver.gecko.driver", "<path_to_geckodriver.exe>");
......
......@@ -10,7 +10,7 @@
![Test Script - Class Creation](img/332fd01782c08929069b72cf2741b325.png)
我将班级命名为“ **HelloWorldFirefox.java** ”。 创建所有这些文件后,“ Package Explorer”窗格将如下所示,
我将类命名为“`HelloWorldFirefox.java`”。 创建所有这些文件后,“包浏览器”窗格将如下所示,
![Test Script - Package Explorer](img/f3d0489e504c26814e937a928d47e9ad.png)
......@@ -22,7 +22,7 @@
4. 根据声明结果在控制台上显示一条消息。
5. 关闭浏览器。
***便笺* ***我们有一整篇文章专门用于声明和验证。 由于第一个脚本的主要座右铭是查看 WebDriver 的工作原理,因此让我们使用简单的 if-else 语句来比较实际和预期的页面标题。*
**便笺* ***我们有一整篇文章专门用于声明和验证。 由于第一个脚本的主要座右铭是查看 WebDriver 的工作原理,因此让我们使用简单的 if-else 语句来比较实际和预期的页面标题。*
**代码如下,**
......@@ -77,7 +77,7 @@ Selenium 3 Beta 版本不像 Selenium 2\. *版本那样支持直接启动 Firefo
#### 2.接下来,为了实例化 Firefox 浏览器,我们将必须导入两个包。
键入后,“ **WebDriver 驱动程序=新的 FirefoxDriver();** ”,在“ WebDriver”和“ FirefoxDriver()”下方会出现一条波浪线。 悬停时,蚀将建议所有可能的快速修复。 单击建议导入相应程序包的第一个修复程序。
键入`WebDriver driver = new FirefoxDriver();`”后,在“`WebDriver`”和“`FirefoxDriver()`”下方会出现一条波浪线。 悬停时,蚀将建议所有可能的快速修复。 单击建议导入相应程序包的第一个修复程序。
![test script - import packages](img/2a99d6b6cbb982884a90b4dbcb9b30ff.png)
......@@ -87,7 +87,7 @@ Selenium 3 Beta 版本不像 Selenium 2\. *版本那样支持直接启动 Firefo
import org.openqa.selenium.WebDriver
```
***即时贴:*** *我们**不要**说,* *WebDriver* *驱动程序* *=* ***新的*** *WebDriver();* *因为 WebDriver 是一个接口,并且只包含已定义但未实现的空方法。 因此无法实例化。*
**注意:** *我们**不要**说,* *WebDriver* *驱动程序* *=* **新的** *WebDriver();* *因为 WebDriver 是一个接口,并且只包含已定义但未实现的空方法。 因此无法实例化。*
* FirefoxDriver 是特定于 Firefox 浏览器的类。 它具有根据接口 WebDriver 定义和实现的方法。 因此,这可以实例化。
......@@ -113,7 +113,7 @@ String pageTitle = "";
String expectedTitle = "Google";
```
我猜很简单,自我解释。 我们只是声明 String 类型的变量并为其分配值。 **baseUrl** 是我们希望在 Firefox 浏览器窗口中为测试场景调用的 URL。 目前, **pageTitle** 保持为空,因为这将是我们将从浏览器中获取的实际值。 **ExpectedTitle** 是将与实际值进行比较的期望值。
我猜很简单,自我解释。 我们只是声明 String 类型的变量并为其分配值。 `baseUrl`是我们希望在 Firefox 浏览器窗口中为测试场景调用的 URL。 目前,`pageTitle`保持为空,因为这将是我们将从浏览器中获取的实际值。 `ExpectedTitle`是将与实际值进行比较的期望值。
#### 4.导航到 Google 页面。
......@@ -123,7 +123,7 @@ driver.get(baseUrl);
这是我们要做的第一件事。 “获取”方法用于导航到指定的 URL。 在这种情况下为 [https://www.google.com](https://www.google.com)
***即时贴:*** *驱动程序* *.navigate()。to(* *baseUrl* *); 也达到相同的结果。 试试看!*
**注意**`driver.navigate().to(baseUrl)`也达到相同的结果。 试试看!
#### 5.获取页面标题。
......@@ -153,7 +153,7 @@ if(pageTitle.equals(expectedTitle)){
quit()方法关闭所有浏览器窗口,并完全结束 WebDriver 会话。 这样可以避免在未正确清除任何相关文件的情况下可能发生的内存泄漏。
***便签*** ****: *驱动程序* *.close(); 也可以使用* *。 不同之处在于,它将关闭当前关注的浏览器窗口。*
**注意**`driver.close()`也可以使用。 不同之处在于,它将关闭当前关注的浏览器窗口。
让我们在这里休息一下,好好沉浸其中! 我们将在下一篇文章中执行此测试。
......
......@@ -16,7 +16,7 @@ Eclipse 使我们能够通过 3 种方式来完成相同的任务,
执行我们的测试将打开一个新的 Firefox 浏览器窗口,并按照代码执行测试步骤。 如上面的屏幕快照所示,输出显示在控制台中。
WebDriver 系列的第一个 ***BrainBell*** 的时间:*回忆!* 您知道吗,在记住事物的过程中,我们甚至还添加了新的想法? 回忆是对大脑中散布的元素的动态重建-称之为创造性的重新想象。 您记得的越多,就越记得!
WebDriver 系列的第一个 **BrainBell** 的时间:*回忆!* 您知道吗,在记住事物的过程中,我们甚至还添加了新的想法? 回忆是对大脑中散布的元素的动态重建-称之为创造性的重新想象。 您记得的越多,就越记得!
因此,回想一下我们是如何为刚刚执行的拳头场景编写代码的,而您都可以尝试自己的一些简单场景。 如果您在旅途中遇到任何颠簸,请在评论部分给我大喊。
......
......@@ -8,16 +8,16 @@
**第 1 步**:首先! 让我们下载所需的可执行文件。 转到“ www.seleniumhq.org/download”。
* *InternetExplorerDriver* 在“ Internet Explorer 驱动程序服务器”部分下可用。
* *ChromeDriver,Opera 和 SafariDriver* 位于“第三方浏览器驱动程序”部分下。
* `InternetExplorerDriver`在“Internet Explorer 驱动程序服务器”部分下可用。
* `ChromeDriver``OperaDriver``SafariDriver`位于“第三方浏览器驱动程序”部分下。
在本文中,我们将仅讨论 *InternetExplorerDriver**ChromeDriver* 。 设置其他浏览器也应遵循类似的步骤。
在本文中,我们将仅讨论`InternetExplorerDriver``ChromeDriver`。 设置其他浏览器也应遵循类似的步骤。
![Browser download](img/10655a5d16771e9ca93d13474f7932c7.png)
**步骤 2**:下载可执行文件后,解压缩并将它们保存在所需的路径中。 我在 Eclipse IDE 的项目中创建了一个名为“浏览器驱动程序”的文件夹(右键单击包->新建->文件夹),并复制了下载的文件以便于访问。
**步骤 3**:现在,让我们通过“右键单击包-> New-> Class”并将它们命名为“ **HelloWorld_IE.java** ”,创建两个新类。 和“ **HelloWorld_Chrome.java** ”。
**步骤 3**:现在,让我们通过“右键单击包-> New-> Class”并将它们命名为“`HelloWorld_IE.java`”,创建两个新类。 和“`HelloWorld_Chrome.java`”。
包浏览器窗格现在如下所示,
......@@ -30,7 +30,7 @@
3. 在控制台中显示“ Hello World”消息。
4. 关闭浏览器。
**首先让我们看看“ HelloWorld_IE.java”类的代码**
**首先让我们看看“`HelloWorld_IE.java`”类的代码**
```java
package com.blog.tests;
......@@ -58,7 +58,7 @@ public class HelloWorld_IE {
}
```
如果注意到的话,此代码与我们在上一篇文章“ **第一个测试脚本 – 通过启动 Firefox** ”中看到的代码非常相似。
如果注意到的话,此代码与我们在上一篇文章“**第一个测试脚本 – 通过启动 Firefox**”中看到的代码非常相似。
这些其他浏览器需要设置系统属性,因为不支持直接启动该属性。
......@@ -87,7 +87,7 @@ import org.openqa.selenium.ie.InternetExplorerDriver;
![Eclipse console](img/80b565da3a0417d5f513219c7b3d81dc.png)
**'HelloWorld_Chrome.java'**类的代码,
**`HelloWorld_Chrome.java`**类的代码,
```java
package com.blog.tests;
......
......@@ -27,7 +27,7 @@
#### 第三步:
下一个工作是在 Eclipse IDE 中将这两个 jar 添加到我们的项目中。 该过程与我们在[**9b”中遵循的过程非常相似。 设置 WebDriver(在 Eclipse 中)**](https://javabeginnerstutorial.com/selenium/9b-webdriver-eclipse-setup/) ”。 请参考该指南以获取分步说明以及屏幕截图。
下一个工作是在 Eclipse IDE 中将这两个 jar 添加到我们的项目中。 该过程与我们在[“9b 设置 WebDriver(在 Eclipse 中)”](https://javabeginnerstutorial.com/selenium/9b-webdriver-eclipse-setup/)中遵循的过程非常相似。请参考该指南以获取分步说明以及屏幕截图。
1. 打开 Eclipse IDE 并导航到相应的工作区。
2. 右键单击设置了 Selenium 的项目->构建路径->配置构建路径…
......
......@@ -12,7 +12,7 @@
![JUnit implementation](img/ac2ffc78ad525227b36a8a3fa84ed450.png)
现在我们已经准备好上课的文件了,让我们采用与“ [**第一个测试脚本 – 通过启动 Firefox**](https://javabeginnerstutorial.com/selenium/9c-webdriver-first-test-script-firefox/) ”帖子中相同的方案。
现在我们已经准备好上课的文件了,让我们采用与“[**第一个测试脚本 – 通过启动 Firefox**](https://javabeginnerstutorial.com/selenium/9c-webdriver-first-test-script-firefox/)”帖子中相同的方案。
1. 打开 Firefox 浏览器。
2. 导航到“ https://www.google.com/”
......@@ -22,7 +22,7 @@
选择相同方案的原因是代码说明保持不变。 无论有没有 JUnit 框架,这都将帮助您清楚地看到代码中的更改。
***便笺*** ****: *这不是 JUnit 教程。 但是,将在需要时提供基本的解释,以使您有一个全面的了解。 有关详细和完整的信息,请参考* [http://junit.org/junit4/](http://junit.org/junit4/) **
**注意**:这不是 JUnit 教程。 但是,将在需要时提供基本的解释,以使您有一个全面的了解。 有关详细和完整的信息,请参考 [http://junit.org/junit4/](http://junit.org/junit4/)
**代码**如下,
......@@ -86,19 +86,19 @@ public class FirstJunitTest {
这会使视力模糊吗? 不要担心! 让我们立即清除雾气!!
大字警报! **注**:这些将特定的含义传达给 JUnit。 他们告诉 JUnit,应该附加到它的`public void`方法,
大字警报! **注**:这些将特定的含义传达给 JUnit。 他们告诉 JUnit,应该附加到它的`public void`方法,
**@Test** – 被当作测试方法运行。
**`@Test`** – 被当作测试方法运行。
**@Before** – 在指定的每种测试方法之前运行。 这用于各种目的。 读取或分配数据,初始化或如果多个测试需要先创建相似的对象才能执行,则最好在之前注释的方法下进行指定。
**`@Before`** – 在指定的每种测试方法之前运行。 这用于各种目的。 读取或分配数据,初始化或如果多个测试需要先创建相似的对象才能执行,则最好在之前注释的方法下进行指定。
**@After** – 在执行每种测试方法之后运行。 通常,会指定与环境清理相关的命令,例如,关闭打开的资源/数据库连接,删除临时数据,释放内存等。即使@Before 或@Test 方法引发异常,也可以保证运行带 after 注释的方法。
**`@After`** – 在执行每种测试方法之后运行。 通常,会指定与环境清理相关的命令,例如,关闭打开的资源/数据库连接,删除临时数据,释放内存等。即使@Before 或@Test 方法引发异常,也可以保证运行带 after 注释的方法。
键入这些注释,在它们下方会出现一条弯曲的线。 悬停时,日食将建议所有可能的快速修复。 单击建议导入 *org.junit* 程序包的第一个修复程序。
键入这些注释,在它们下方会出现一条弯曲的线。 悬停时,日食将建议所有可能的快速修复。 单击建议导入`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 的每个测试方法,都会发生这种情况。
#### 要运行测试,
......
......@@ -6,9 +6,9 @@
您的测试用例可以成功运行,并且一次执行一行时可以按预期工作,但是作为套件/批处理运行时,它可能会失败。 挠头以了解其背后的原因? 让我们潜入更多!
当我们使用 *driver.get(“ url_we_wish_to_access”)**driver.navigate()。to(“ url”)*或单击超链接等时,这些调用将启动页面 在该加载活动完成之前加载并返回。 因此,如果页面的加载线程尚未填充 Web 元素,而您尝试使用 *driver.findElement(“ locating_strategy”)*找到它,则得到的只是**异常** 即 NoSuchElementException,ElementNotVisibleException 等。
当我们使用`driver.get("url_we_wish_to_access")``driver.navigate().to("url")`或单击超链接等时,这些调用将启动页面 在该加载活动完成之前加载并返回。 因此,如果页面的加载线程尚未填充 Web 元素,而您尝试使用`driver.findElement("locating_strategy")`找到它,则得到的只是**异常**`NoSuchElementException``ElementNotVisibleException`等。
所有这些意味着我们必须找到一种告诉 Selenium 的方法,我们希望它等待一定的时间,或者直到 Web 元素变得可访问/可单击/显示为止,然后再引发可怕的异常。 在那里,不要惊慌。 我看到一些汗珠滴到你的额头上! 那么,如何使这种压力成为我们自己的大力水手菠菜的版本呢? 感谢 ***隐式,显式和流畅的等待***
所有这些意味着我们必须找到一种告诉 Selenium 的方法,我们希望它等待一定的时间,或者直到 Web 元素变得可访问/可单击/显示为止,然后再引发可怕的异常。 在那里,不要惊慌。 我看到一些汗珠滴到你的额头上! 那么,如何使这种压力成为我们自己的大力水手菠菜的版本呢? 感谢**隐式,显式和流畅的等待**
是时候去拜访每一个了。
......@@ -41,15 +41,15 @@
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)) 抛出异常
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)
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**:如果希望找到一个元素,但无论结果如何,都可以继续进行测试。
......
......@@ -27,7 +27,7 @@ ExpectedCondition 预定义方法的一些示例是,
您可以在此处找到[,找到适用于 Java 的 ExpectedConditions 包的所有可用方法及其用法的详细信息。](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html)
***便签*** ****** *根据 [Selenium 的官方文档](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits)* *,我们警告您不要混合使用隐式和显式等待,因为这可能会导致不可预测的等待时间。*
***注意*** ****** *根据 [Selenium 的官方文档](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits)* *,我们警告您不要混合使用隐式和显式等待,因为这可能会导致不可预测的等待时间。*
### 流利的等待
......@@ -65,7 +65,7 @@ public WebElement fluentWait(final By locator) {
同意的显式等待包括对代码的更多修饰,但是您认为值得这样做吗?
***便签*** ****: *您可能会想,为什么要经历所有这些痛苦? 我不能只使用 Thread.sleep()吗? 嗯,不 不建议这样做,因为它会使整个测试脚本无条件进入休眠状态。 在大多数情况下,指定的睡眠时间不够长(导致异常),或者变得太长,导致即使元素加载速度更快,测试也要等待。*
***注意*** ****: *您可能会想,为什么要经历所有这些痛苦? 我不能只使用 Thread.sleep()吗? 嗯,不 不建议这样做,因为它会使整个测试脚本无条件进入休眠状态。 在大多数情况下,指定的睡眠时间不够长(导致异常),或者变得太长,导致即使元素加载速度更快,测试也要等待。*
**令我全神贯注**:虽然显式等待涉及更多的编程部分,但由于它能够解决很多问题,使我们的生活变得更加轻松,我宁愿选择此方法,而不是隐式等待(基于 测试自动化的需求和复杂性涉及*眨眼*)。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册