为什么我们使用WebDriver而不是Selenium IDE?

时间:2013-10-30 13:06:35

标签: selenium webdriver selenium-webdriver selenium-ide

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

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

有人可以解释为什么IDE记录的脚本在WebDriver中失败了吗?

8 个答案:

答案 0 :(得分:55)

  

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

很好的问题,这是答案:

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

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

它也归结为您的测试自动化原则。我认为测试自动化(以及其他一些专业人士)认为应该从编程角度来考虑测试自动化。程序员应该编写测试并维护测试。理想情况下,您的质量保证人员应接受培训,以编写和维护自己的测试。

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

  

任何人都可以解释为什么IDE记录的脚本在Webdriver中失败了吗?

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

您可以阅读所进行的研究的全文,称为Why do Record/Replay Tests of Web Applications Break?

答案 1 :(得分:12)

  

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

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

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

答案 2 :(得分:9)

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

IDE不知道该等待什么

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

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

可以在IDE中手动添加等待,但如果你这样做,那么你就不再是"只记录我们所有的测试用例"。你正在做的事情变得更像是为WebDriver编写代码。

用户效率低下

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

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

硒操作可能成本高昂

如果运行Selenium命令的软件是本地软件,并且您的浏览器是本地软件,您可能觉得Selenium操作成本不高,但如果您在一台计算机上运行命令而浏览器是远程的,那么您会注意到显着放缓。例如,如果您在Sauce Labs VM或BrowserStack VM中生成浏览器以运行测试套件,则网络延迟将增加该套件完成所需时间的大量时间。对于完整的应用程序测试套件,这可能意味着更多分钟。

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播放这些录音。

答案 3 :(得分:3)

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

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

答案 4 :(得分: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

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:1)

因为当代码的复杂性增加时,您将很难使用IDE进行管理。使用IDE将难以维护脚本。

另外,将测试用例从IDE导出到webdriver并非100%可靠。

答案 7 :(得分:0)

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

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

相关问题