42

为什么我们不能在Selenium IDE中记录所有测试用例,将其导出到Java/WebDriver并使用 Eclipse 在 WebDriver 中运行?

我需要一个明确的解释,因为我对使用 WebDriver 感到非常困惑!

谁能解释为什么 IDE 录制的脚本在 WebDriver 中失败?

4

8 回答 8

56

为什么我们不能在 IDE 中记录所有测试用例,将其导出到 java/webdriver 并在 webdriver 中运行

很好的问题,这是答案:

Selenium IDE 是一个记录和回放工具,非常好用,但是非常不可靠。记录和回放在 Web 应用程序中通常是不受欢迎的。由于 Web 应用程序经常更改,因此 IDE 不是生产环境的理想解决方案,因为可能会出现维护噩梦。

让我给你一个实际的例子。您记录您的测试,并找到具有动态 ID 的元素。当然我们可以将它导入 eclipse,但是当测试开始失败时会发生什么?为什么不简单地让您的测试变得敏捷和独立以首先捕获这些。

它还归结为您的测试自动化原则。在我看来(和其他几位专业人士)测试自动化认为应该从编程的角度来处理测试自动化。程序员应该编写测试并维护测试。理想情况下,您的质量保证人员应该接受过编写和维护自己的测试的培训。

再次回到您的问题,IDE 旨在成为自动化的快速解决方案,而不是完整回归套件的解决方案。

谁能解释为什么 IDE 录制的脚本在 Webdriver 中失败?

我有一段时间没有使用 IDE,但它们失败的原因是因为导出的脚本只是步骤,而不是整个 java 文件。这也是因为 Selenium IDE 导出在如何运行测试时应该是不可知的。假设我是 jUnit 的用户。如果 Selenium IDE 一直将它导出到 TestNG 会怎样?这不公平.. 老实说,我宁愿创建自己的测试,也不愿每次创建测试文件时都更改一行。

您可以阅读一项名为“为什么 Web 应用程序的记录/重放测试会中断? ”的研究的全文。

于 2013-10-30T13:24:00.967 回答
12

为什么我们不能在 Selenium IDE 中记录我们所有的测试用例,将其导出到 Java/WebDriver 并使用 Eclipse 在 WebDriver 中运行它。

实际上,您可以很容易地使用 Selenium IDE 做到这一点。在 Selenium IDE 中记录您的测试用例/测试套件,将“Java / JUnit 4 / Webdriver”导出到 .java 文件。这将生成一个 JUnit 测试,您可以从 Eclipse 导入并运行它(当然使用正确版本的 JUnit)。

它不是 100% 可靠的,您可能需要进行一些手动更改/更正,但总的来说它工作得很好。从一个小测试用例开始,然后从那里开始工作。

于 2013-10-31T07:32:53.663 回答
9

为什么不直接在 IDE 中录制并使用 WebDriver 播放录制的内容???

IDE 不知道要等待什么

假设 Bob 正在执行手动检查并记录他与 Selenium IDE 的交互。他执行了一个需要一段时间来更新 GUI 的操作,当操作完成时,他单击了一个按钮。Bob 知道 GUI 已完成更新,因为在操作完成时移除了操作开始时显示的微调器。IDE 将如何捕获在单击按钮之前必须完成操作这一事实?(注意这里不是在操作完成之前按钮被禁用的情况。)这不是假设:当您测试动态表(如由 DataTables 管理的那些)时,用户可以随时更改任何内容。

这可能是使用 IDE 创建的一系列命令在 WebDriver 中失败的原因之一。它只是不知道要等什么。

可以在 IDE 中手动添加等待,但如果您这样做,那么您将不再“只是记录 [ing] 我们所有的测试用例”。而你所做的变得更像是为 WebDriver 编写代码。

用户效率低下

不久前有一个 Selenium 问题,用户希望让 Selenium 单击具有多页记录的表中的最后一条记录。所以问题是,我怎样才能翻阅表格,一直到最后一页,然后单击最后一条记录?有人(可能是我,也可能是其他人)指出,如果表是可排序的,则可以按相反的顺序对其进行排序,然后 Selenium 代码可以单击第一条记录。那是2操作而不是p+1操作:点击p次数,其中p是页数,加上1次点击记录。

当我们为 WebDriver 编写代码时,我们有机会编写测试以避免走风景路线来获得我们想要的结果。有关它为何重要的技术细节,请参阅下一点。

Selenium 操作可能成本高昂

如果运行 Selenium 命令的软件是本地的,而您的浏览器是本地的,那么您可能不会觉得 Selenium 操作成本高昂,但是如果您在一台机器上运行命令并且浏览器是远程的,那么您会发现速度明显变慢。例如,如果您在 Sauce Labs 虚拟机或 BrowserStack 虚拟机中生成浏览器来运行测试套件,那么网络延迟将大大增加套件完成所需的时间。对于完整的应用程序测试套件,这可能意味着更多分钟。

IDE 生成一系列命令,每个命令都需要在 Selenium 脚本和浏览器之间往返。每次往返都会累加。假设我想检查两个元素是否包含相同的文本。我不会使用 Selenese,因为我通常不使用 IDE,而是在 Python 中使用 WebDriver 代码,脚本可能是:

a = driver.find_element_by_id("a")
b = driver.find_element_by_id("b")
assert_equal(a.text, b.text)

此代码需要 4 次往返:每次往返一次find_element...,每次访问text字段一次。可以编写相同的测试:

a_text, b_text = driver.execute_script("""
var a = document.getElementById("a");
var b = document.getElementById("b");
return [a.textcontent, b.textContent];
""");
assert_equal(a_text, b_text);

这只需要一次往返。当您使用 IDE 记录操作时,命令序列就像前面的片段一样:大量往返。当您为 WebDriver 编写代码时,您有机会在编写代码时进行优化。

这并不意味着 Selenium IDE 没有用处,但我永远不会想到只用它记录测试,然后用 WebDriver 播放这些记录。

于 2014-11-11T02:22:23.320 回答
3

如果您是新手,您实际上可以使用80%的 IDE 脚本作为您的 webdriver JAVA 脚本,您只需稍微即兴导出您的 IDE 脚本,它就可以正常工作。

但是当你开始测试复杂的功能时,你必须学习一些基本的 java 方法来解决它!

于 2013-11-06T07:09:53.973 回答
2

我不敢苟同。当简单的记录和回放可以在很短的时间内达到相同的结果时,我认为没有理由维护额外的代码。

我同意录制脚本的 impl 必须是敏捷的。它不能像内置命令那样简单,而且必须使其灵活,甚至实现自己的特定于被测应用程序的宏(又名命令/别名)。

尽管如此,如果实施得当并在少数 Selenium IDE 插件(如流控制)的帮助下,维护如此复杂的测试套件并通过 HTML Runner 回放它们变得轻而易举。我使用 Selenium IDE HTML 脚本来完全覆盖复杂的站点,并为应用程序的所有响应模式重用相同的脚本。

维护很简单,因为 IDE 将帮助您快速调整失败的 cmd,并且可以通过等待页面上的 DOM 内容更改来轻松正确地计算 AJAX 等待。我仍然不相信这个解雇 Selenium IDE 的 AJAX 借口。

对于 Selenium IDE 和 Maven 的 SureFire 测试插件使用的流控制命令/别名/宏的 Maven 集成,请参见: https ://github.com/paulbors/sideflow

随意在您的产品中使用它并根据需要进行改进。

于 2017-04-26T15:10:49.303 回答
1

webdriver 允许您在 Selenium 服务器中执行使用 Selenium IDE 捕获的测试用例,或通过 RC 到多个服务器。这包括与支持 Selenium 的提供程序集成的选项(请参阅底部的链接)。

例如,如果您在 IDE 中捕获了测试用例,您可以轻松地与您自己的 selenium 服务器或 Saucelabs 等提供商集成,以处理您在 Ubuntu 上的 Firefox、OSX 上的 Safari 和 Windows 8 上的 IE10 中运行测试用例. 与任何测试用例一样,您可以从您的 IDE(Eclipse/IDEA/等)您的构建器(maven/gradle/)和/或通过您的 CI 系统运行它。

查看https://saucelabs.com/selenium获取一些示例。我们还使用我们的 selenium 测试用例与 Soasta 进行负载测试 - WebDriver 允许在许多不同的上下文中使用简单的 IDE 测试。

于 2014-03-12T11:20:48.643 回答
1

因为当您的代码复杂度增加时,您将很难使用 IDE 来管理它。使用 IDE 很难维护您的脚本。

此外,将测试用例从 IDE 导出到 webdriver 也不是 100% 可靠的。

于 2014-11-10T09:58:59.250 回答
0

其他人已经说了很多有用的答案。缺少的一件事是,如果您编写代码而不是使用 IDE,您就有能力对数据库进行更改。这取决于您正在测试的网站有多有用,但这里有一些我经历过的有用示例。在一种情况下,该网站有一个课程的多个部分。我们的一项测试是将这些部分合并为一个。IDE 无法做到这一点。但是使用 webdriver,我们可以将所有测试数据添加到数据库中,执行合并,然后从数据库中删除数据。

webdriver 的另一个优势是 Selenium Grid。使用 Grid,您可以在多个浏览器上并行运行测试。这使您的测试运行得更快,您可以更彻底地测试代码。

于 2017-06-29T19:14:07.897 回答