diff --git a/docs/101.md b/docs/101.md index 1456a07e2c499dd869969da47bd7ea96988c1520..e20baeb73c45eef09d868399a86e070c4f913454 100644 --- a/docs/101.md +++ b/docs/101.md @@ -8,7 +8,7 @@ 因此,如果您可以集中精力并强调 Selenium 工具套件在这些方面的积极方面,那么您一定会品尝到成功的。 而这正是我要令您惊讶的地方。 -每个人都喜欢听与故事相关的故事。 同意吗 因此,让我们以故事的形式解释 Selenium 的超凡魅力,而不是使用传统的无聊的 Power Point PPT,让我们激动不已。 这将使他们一直充满吸引力和说服力。 我强烈建议您使用 [prezi](https://prezi.com/) 创建业务演示,因为它超出了上述所有期望。 请注意,这是我根据我的专业经验提出的个人建议。 +每个人都喜欢听与故事相关的故事。 同意吗?因此,让我们以故事的形式解释 Selenium 的超凡魅力,而不是使用传统的无聊的 Power Point PPT,让我们激动不已。 这将使他们一直充满吸引力和说服力。 我强烈建议您使用 [prezi](https://prezi.com/) 创建业务演示,因为它超出了上述所有期望。 请注意,这是我根据我的专业经验提出的个人建议。 我已经使用 prezi 做了一个简单的演示,并以相同的场景作为示例。 这是 [vimeo 链接](https://vimeo.com/188186769),显示了我在幻灯片中浏览的视频。 diff --git a/docs/102.md b/docs/102.md index ec29f641822b18ddab2e03e2efd9507d3961ebc2..ebd199b25263ad4e6557bdb3932e6124e77ff214 100644 --- a/docs/102.md +++ b/docs/102.md @@ -20,7 +20,7 @@ 有很多高级编程语言,您可能想使用 C# ,但其他人可能更喜欢 Python。 每个人都希望利用通用的 WebDriver API 来以自己舒适的语言自动化浏览器。 这是语言级别绑定进入图片的地方。 这些就像用相应语言编写的*粘合代码/包装库*与 WebDriver API 进行通信。 除了 Java,C# ,Ruby,Python 绑定外,还有更多。 也很容易添加新的。 -接下来到**驱动程序**上。 WebDriver API 使我们可以拥有一些驱动程序,这些驱动程序知道如何驱动与之对应的特定浏览器。 我们有 Chrome 驱动程序,IE 驱动程序,Microsoft Edge 驱动程序,Firefox 驱动程序(内置)等。还有移动专用驱动程序,例如 iOS 驱动程序,Selendriod(适用于 Android 的 Selenium)等。例如,Chrome 驱动程序知道如何 驱动 Chrome 浏览器执行低级活动,例如操纵 Web 元素,导航到网页,从中获取用户输入等等。 +接下来到**驱动程序**上。 WebDriver API 使我们可以拥有一些驱动程序,这些驱动程序知道如何驱动与之对应的特定浏览器。 我们有 Chrome 驱动程序,IE 驱动程序,Microsoft Edge 驱动程序,Firefox 驱动程序(内置)等。还有移动专用驱动程序,例如 iOS 驱动程序,Selendriod(适用于 Android 的 Selenium)等。例如,Chrome 驱动程序知道如何驱动 Chrome 浏览器执行低级活动,例如操纵 Web 元素,导航到网页,从中获取用户输入等等。 我们在代码中提到了所需的驱动程序。 该驱动程序服务器作为可执行文件提供。 当我们运行测试时,驱动程序服务器会监听本地计算机上的端口。 它将解释从 WebDriver API 接收的命令,在实际的浏览器上执行,并将结果通过 API 返回给我们的代码。 diff --git a/docs/104.md b/docs/104.md index e534e6da9931c317def7de693d4ad13ba5258535..9ddc22de278d40e995e32d690b61730457506cbf 100644 --- a/docs/104.md +++ b/docs/104.md @@ -62,7 +62,7 @@ System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\ } ``` -我知道外表令人生畏! 不过不用担心 我们将阐明所有这些代码,并找出其含义。 让我们逐行走下去,不遗余力。 +我知道外表令人生畏! 不过不用担心,我们将阐明所有这些代码,并找出其含义。 让我们逐行走下去,不遗余力。 ## 代码实践: diff --git a/docs/109.md b/docs/109.md index 5dcb0ad1646430223f25315240a1f4816202699f..7d5d5a17e32e803be73af22c91112cec9b951ed8 100644 --- a/docs/109.md +++ b/docs/109.md @@ -6,7 +6,7 @@ 您的测试用例可以成功运行,并且一次执行一行时可以按预期工作,但是作为套件/批处理运行时,它可能会失败。 挠头以了解其背后的原因? 让我们潜入更多! -当我们使用`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 元素变得可访问/可单击/显示为止,然后再引发可怕的异常。 在那里,不要惊慌。 我看到一些汗珠滴到你的额头上! 那么,如何使这种压力成为我们自己的大力水手菠菜的版本呢? 感谢**隐式,显式和流畅的等待**。 @@ -48,7 +48,7 @@ driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 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`”并不是很有用。 我们可能希望使用更多信息来自定义此错误消息,例如捕获屏幕快照或添加更多详细信息等。可以通过在每次`finddElement(s)`调用周围使用`try-catch`块来实现此目的,但这不是我们使用隐式等待的目标 因为这是一个全球性的时间设置。 +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 秒左右。 我们对此的理由是,“无论如何,所有元素的加载速度都将比此时快,并且测试将按预期进行。” 但是您甚至猜不到**性能** - 这种方法不是一个好主意吗? 我在这里给您举几个示例,以便更好地了解, diff --git a/docs/110.md b/docs/110.md index 8cd5107ff3c51f1c90c60f024f9db1ba278bc131..38a96ccb8979bc6b03ed31d7a900feb8ce391166 100644 --- a/docs/110.md +++ b/docs/110.md @@ -65,9 +65,9 @@ public WebElement fluentWait(final By locator) { 同意的显式等待包括对代码的更多修饰,但是您认为值得这样做吗? -**注意**: *您可能会想,为什么要经历所有这些痛苦? 我不能只使用`Thread.sleep()`吗? 嗯,不 不建议这样做,因为它会使整个测试脚本无条件进入休眠状态。 在大多数情况下,指定的睡眠时间不够长(导致异常),或者变得太长,导致即使元素加载速度更快,测试也要等待。* +**注意**: *您可能会想,为什么要经历所有这些痛苦? 我不能只使用`Thread.sleep()`吗? 嗯,不,不建议这样做,因为它会使整个测试脚本无条件进入休眠状态。 在大多数情况下,指定的睡眠时间不够长(导致异常),或者变得太长,导致即使元素加载速度更快,测试也要等待。* -**令我全神贯注**:虽然显式等待涉及更多的编程部分,但由于它能够解决很多问题,使我们的生活变得更加轻松,我宁愿选择此方法,而不是隐式等待(基于 测试自动化的需求和复杂性涉及*眨眼*)。 +**令我全神贯注**:虽然显式等待涉及更多的编程部分,但由于它能够解决很多问题,使我们的生活变得更加轻松,我宁愿选择此方法,而不是隐式等待(基于测试自动化的需求和复杂性涉及*眨眼*)。 您的视线是否模糊? 不要惊慌,因为所有水域都会落在后面的职位上。 我们将在屏幕截图中看到更实际的等待示例。 一旦涵盖了定位器的类型和策略,就可以更好地理解和掌握该主题。 因此,请继续关注此空间! diff --git a/docs/115.md b/docs/115.md index 06d2ff3e16f83115a0d7ad356b07002c8fb45da5..630334bd10f6364cd02d82bbb1482aa8ce1e7e44 100644 --- a/docs/115.md +++ b/docs/115.md @@ -33,7 +33,7 @@ ### 1.捷径: -是否想以简单的方式在网页上找到任何元素的 XPath? 做完了 是否希望几乎每次都处于完美的工作状态? 也做完了。 马上完成所有这些操作呢? 它让您涵盖了摇滚明星! 您只需要“Firebug”! 它可以作为 Firefox 浏览器的附加组件使用。 +是否想以简单的方式在网页上找到任何元素的 XPath? 做完了。是否希望几乎每次都处于完美的工作状态? 也做完了。 马上完成所有这些操作呢? 它让您涵盖了摇滚明星! 您只需要“Firebug”! 它可以作为 Firefox 浏览器的附加组件使用。 食谱来了: diff --git a/docs/120.md b/docs/120.md index 79dfba2ec89fbc73307c1f5f2ded2941c00a6d59..c15632f5267e48e9b0e857a4209bf70fca085063 100644 --- a/docs/120.md +++ b/docs/120.md @@ -170,7 +170,7 @@ public class Click_Image { 现在该轮到您尝试这些新学到的技能了。 -有什么问题吗 在评论部分开火! +有什么问题吗?在评论部分开火! 在那之前,请在另一篇文章中见。 祝你有美好的一天! diff --git a/docs/133.md b/docs/133.md index 9480c5ecb491fc1ce57746cf35779276c624c3fc..c568f8be021bb13b9b94a1423e2f05030f2369a0 100644 --- a/docs/133.md +++ b/docs/133.md @@ -31,7 +31,7 @@ Apache ANT 的`JunitReport`任务通过执行以下步骤来生成报告, ``` -**注意**: *所有单独的 JUnit 测试都是通过“junit” ANT 任务执行的,生成的 XML 文件为 生成的名称使用“`outfile`”属性指定。 如果未提及名称,则默认值为“`TEST-name`”(其中`name`是在 junit 任务的`name`属性中指定的测试名称)。* +**注意**: *所有单独的 JUnit 测试都是通过“junit” ANT 任务执行的,生成的 XML 文件的名称使用“`outfile`”属性指定。 如果未提及名称,则默认值为“`TEST-name`”(其中`name`是在 junit 任务的`name`属性中指定的测试名称)。* 使用`fileset`元素,`junitreport`会从“`dir`”中提到的给定目录中收集所有单个 XML 文件,并根据上述代码段考虑所有以“`TEST-`”开头的文件。 @@ -69,7 +69,7 @@ Apache ANT 的`JunitReport`任务通过执行以下步骤来生成报告, * 在标题部分添加徽标 * 修改静态文字 -**注意**:因此,所有更改都是对放置在项目目录“`E:\Selenium\`”(其中 Selenium 中的“`junit-frames.xsl`”)进行的 在我的情况下是项目名称)。* +**注意**:因此,所有更改都是对放置在项目目录“`E:\Selenium\`”(其中 Selenium 中的“`junit-frames.xsl`”)进行的,在我的情况下是项目名称)。 ## 更改报告标题和描述 diff --git a/docs/143.md b/docs/143.md index 1ec4e0db41e1d135acd26265462b39f1c4a28777..5d2cdc423050ba671351745380e4af252b5804ba 100644 --- a/docs/143.md +++ b/docs/143.md @@ -4,7 +4,7 @@ 我敢肯定,您现在会听说无头,因为 Google 为其 Chrome 浏览器(从 59 版开始)引入了无头选项! Firefox 紧随其后。 它也可以在无头模式下运行!! 让我们在没有 Firefox 的情况下在 Firefox 中执行一些自动化的 Selenium 测试! 😉换句话说,测试在后台运行,并且没有显示(即,浏览器 UI 不显示给用户)。 该代码还将提供给 Chrome 浏览器。 -您脑海中可能会出现的第一个问题是,为什么我首先需要一个无头的浏览器? 我收到你的来信。 不用担心 我有答案并且相信我,这些都是很好的答案。 因此,事不宜迟,以下是您无头的几个原因, +您脑海中可能会出现的第一个问题是,为什么我首先需要一个无头的浏览器? 我收到你的来信。 不用担心,我有答案并且相信我,这些都是很好的答案。 因此,事不宜迟,以下是您无头的几个原因, 1. 如果您的目标是获得更好的**速度**和**性能**,那么别无所求! 由于无需为每个测试都启动浏览器 UI,从而避免了加载 JavaScript,CSS 和呈现 HTML 所需的所有时间,因此测试运行速度更快。 2. 通常,在 **CI(连续集成)管道**中,它需要在没有实际 GUI 的服务器或 Linux OS 等系统上运行。 无头模式节省了一天! diff --git a/docs/150.md b/docs/150.md index fe3ca619809c4acd1a34b446ae4b4c440f9f2e87..6652f36cc3d4c9968a5528a288e46cfa7e244304 100644 --- a/docs/150.md +++ b/docs/150.md @@ -8,7 +8,7 @@ ![Attribute binding with template syntax](img/1ed51c59dd82a5d6011f7e594f0eb2cc.png) -失望了吗?这是发生了什么事。 正如预期的那样,“Vue 官方网站”文本已显示为超链接。 单击它会打开一个新选项卡,因为我们使用了`_blank`作为目标(这里没什么疯狂的)。 现在,查看地址栏中的 URL。 不会像在 Vue 实例的数据对象中指定的那样导航到 [https://vuejs.org/v2/guide/index.html](https://vuejs.org/v2/guide/index.html) ,而是处理`href`属性的双引号内的值 作为字符串并解析为 URL `{{ vueLink }}`。 这就是普通 HTML `href`属性的工作方式,这就是您在新打开的标签页的地址栏中看到的内容。 显然,绑定从未发生过。 +失望了吗?这是发生了什么事。 正如预期的那样,“Vue 官方网站”文本已显示为超链接。 单击它会打开一个新选项卡,因为我们使用了`_blank`作为目标(这里没什么疯狂的)。 现在,查看地址栏中的 URL。 不会像在 Vue 实例的数据对象中指定的那样导航到 [https://vuejs.org/v2/guide/index.html](https://vuejs.org/v2/guide/index.html),而是将`href`属性的双引号内的值当做字符串,并解析为 URL `{{ vueLink }}`。 这就是普通 HTML `href`属性的工作方式,这就是您在新打开的标签页的地址栏中看到的内容。 显然,绑定从未发生过。 因此,这就是 Vue 的工作方式。 我们不能将模板语法/大括号括起来用于 HTML 属性绑定。 但是,如果我们仍然想将某些东西动态绑定到属性上怎么办? 不要担心! Vue 附带了另一个用于此目的的指令`v-bind`。 只要我们花时间寻找指令,指令就在我们周围。 diff --git a/docs/152.md b/docs/152.md index 17256e628cba89527acc6448e69bc781a5643b18..5cf7c25d99f5db827037db23c68d5f747c6409fe 100644 --- a/docs/152.md +++ b/docs/152.md @@ -6,7 +6,7 @@ 但是该怎么办? 我们忙于观看 Netflix 时,Evan You(Vue 的创建者)出于某种原因添加了它。 因此,让我们看看为什么该指令首先存在。 *警告*:这篇文章是“[条件渲染第 1 部分](https://javabeginnerstutorial.com/vue-js/7-conditional-rendering-part-1/)”的继续,因此,我建议您在继续进行之前先充分了解这些概念。 -我们讨论了`v-if`,`v-else`等不仅可以应用于单个 HTML 元素,而且可以应用于使用`
`或`