为什么我们使用WebDriver而不是Selenium IDE?
为什么我们不能在Selenium IDE中logging所有的testing用例,将它导出到Java / WebDriver并在Eclipse中使用WebDriver运行?
我需要一个清晰的解释,因为我非常困惑的使用WebDriver!
任何人都可以请解释为什么WebDriver的IDElogging脚本失败?
为什么我们不能在IDE中logging所有的testing用例,将它导出到java / webdriver并在webdriver中运行
伟大的问题,这里是答案:
Selenium IDE是一个logging和回放工具,非常容易使用,但是非常不可靠。 在Web应用程序中,logging和回放通常是不被赞赏的。 由于Web应用程序经常发生变化,由于可能出现的维护噩梦,IDE不是生产环境的理想解决scheme。
让我给你一个实际的例子。 您logging您的testing,并find一个具有dynamicID的元素。 当然我们可以将它导入到日食中,但是当testing开始失败时会发生什么? 为什么不简单地让你的testing敏捷和独立,抓住这些摆在首位。
它也归结于您的testing自动化的原则。 我认为testing自动化(以及其他一些专业人员)认为应该从编程的angular度来考虑testing自动化。 程序员应该编写testing,并维护testing。 理想情况下,您的质量保证人员应接受培训,以编写和维护自己的testing。
所以,再回到你的问题,IDE被devise成一个快速的自动化解决scheme,而不是一个完整的回归套件的解决scheme。
任何人都可以请解释为什么在Webdriver IDElogging脚本失败?
我有一段时间没有使用IDE,但是失败的原因是因为导出的脚本只是步骤 ,而不是整个Java文件。 这也是因为Selenium IDE出口在如何运行testing时应该是不可知论的。 说我是jUnit的用户..如果Selenium IDE始终将它导出到TestNG呢? 这不公平..老实说,我宁愿创build我自己的testing,而不是每改变一行我创build我的testing文件。
您可以阅读所做的研究的全文,称为为什么Web应用程序的logging/重放testing打破?
为什么我们不能在Selenium IDE中logging所有的testing用例,将它们导出到Java / WebDriver并使用Eclipse在WebDriver中运行。
你实际上可以很容易地用Selenium IDE做到这一点。 在Selenium IDE中loggingtesting用例/testing套件,导出到“Java / JUnit 4 / Webdriver”到.java文件。 这将生成一个JUnittesting,您可以从Eclipse导入和运行(当然,正确版本的JUnit)。
这不是100%可靠的,你可能需要做一些手动的修改/更正,但总的来说,它工作得很好。 从一个小小的testing箱开始,从那里开始工作。
为什么不在IDE中录制并使用WebDriver播放录音?
IDE不知道等待什么
假设Bob正在执行手动检查并logging他与Selenium IDE的交互。 他执行一个需要一段时间来更新GUI的操作,当操作完成时,他点击一个button。 Bob知道GUI已经完成更新,因为当操作开始时显示的微调框在操作完成时被移除。 在点击button之前IDE如何捕获操作必须完成的事实? (注意,这里并不是假设button被禁用,直到操作完成。)这不是一个假设:当你testingdynamic表(如DataTablespipe理的那些表)时,用户可以随时改变任何东西。
这可能是由于使用WebDriver而使用IDE创build的一系列命令失败的原因之一。 它只是不知道该等什么。
可以在IDE中手动添加等待,但是如果您正在这样做,那么您就不再“仅logging所有testing用例”。 你在做什么变得更像是为WebDriver编写代码。
用户效率低下
不久之前,出现了一个Selenium问题,用户希望Selenium在一个有多页logging的表中点击最后一个logging。 所以问题是,我怎么能通过表,一直到最后一页,然后点击最后一个logging? 有人(也许我也许是别人)指出,如果表是可sorting的,可以按相反顺序sorting,然后Selenium代码可以点击第一条logging。 这是2个操作,而不是p+1
操作:点击p
次,其中p
是页面的数量,再加上1次点击logging。
当我们为WebDriver编写代码时,我们有机会编写testing,以避免走景观路线,以得到我们想要的结果。 关于为什么它很重要的技术细节见下一个点。
selenium的运作可能是成本高昂的
如果运行Selenium命令的软件是本地的,并且您的浏览器是本地的,那么您可能不会觉得Selenium操作的成本很高,但是如果您在一台机器上运行命令并且浏览器是远程的,那么您会发现速度显着下降。 例如,如果您在Sauce Labs VM或BrowserStack VM中生成浏览器来运行testing套件,则networking延迟将会大大增加套件完成所需的时间。 对于一个完整的应用程序testing套件,这可能意味着更多的分钟。
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...
往返find_element...
,每次访问text
字段一次。 同样的testing可以写成:
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来logging动作的时候,命令的顺序就像前面的片段一样:大量的往返行程。 当您为WebDriver编写代码时,您有机会在编码时进行优化。
这并不意味着Selenium IDE没有用,但我永远不会想到只用它录制testing,然后用WebDriver播放这些录音。
如果你是一个新手 ,你实际上可以使用80%的IDE脚本作为你的webdriver JAVA脚本,只需要稍微改进你的导出IDE脚本,它就可以正常工作。
但是当你开始testing复杂的function时,你必须学习一些基本的java方法来解决它!
webdriver允许您在Selenium服务器上执行通过Selenium IDE捕获的testing用例,或者通过RC执行到多个服务器的testing用例。 这包括与支持Selenium的提供商集成的选项(请参阅底部的链接)。
例如,如果您已经在IDE中捕获了您的testing用例,则可以轻松地与您自己的selenium服务器或像Saucelabs这样的提供程序集成来处理在Ubuntu上的Firefox,OSX上的Safari和Windows 8上的IE10上运行testing用例与任何testing用例一样,你可以从你的IDE(Eclipse / IDEA / etc),你的构build器(maven / gradle /),和/或通过CI系统运行它。
查看https://saucelabs.com/selenium获取一些示例。; 我们还使用我们的seleniumtesting用例进行Soasta负载testing – WebDriver允许简单的IDEtesting在许多不同的上下文中使用。
因为当代码的复杂性会增加时,使用IDE来pipe理它将会很困难。 使用IDE维护脚本将很困难。
另外将testing用例从IDE导出到webdriver不是100%可靠的。
我不敢苟同。 当简单的logging和回放可以在很短的时间内达到相同的结果时,我没有理由需要维护额外的代码。
我同意logging脚本的impl必须是敏捷的。 它不能像构build命令一样简单,而且必须使其敏捷,甚至实现特定于被testing应用程序的自己的macros(又名命令/别名)。
不过,如果在像stream量控制这样的less量Selenium IDE插件的帮助下正确实施,那么维护如此复杂的testing套件并通过HTML Runner进行播放变得轻而易举。 我已经使用Selenium IDE的HTML脚本来完全覆盖复杂的网站,并重复使用相同的脚本的应用程序的所有响应模式。
维护简单,因为IDE将帮助您快速调整失败的cmd,并且可以通过等待页面上的DOM内容更改来轻松地解决AJAX等待问题。 我仍然不相信这个AJAX解雇Selenium IDE的借口。
对于Selenium IDE和Maven的SureFiretesting插件使用的stream控制命令/别名/macros的Maven集成,请参阅: https : //github.com/paulbors/sideflow
随意在您的产品中使用它,并根据需要进行改进。
其他人已经说了很多有用的答案。 缺less的一件事是,如果您编写代码而不是使用IDE,则可以更改数据库。 这取决于你正在testing的网站这是多么有用,但这里有一些我经历过的有用的例子。 在一个案例中,网站有一个class级的多个部分。 我们的一个testing是将这些部分合并为一个。 IDE不能这样做。 但是使用webdriver,我们可以将所有testing数据添加到数据库中,执行合并,然后从数据库中删除数据。
Webdriver的另一个优势是Selenium Grid。 通过网格,您可以在多个浏览器上并行运行testing。 这使您的testing运行得更快,您可以更彻底地testing代码。
- 如何在Selenium IDE中循环testing?
- PhantomJS很长一段时间说“现在开始asynchronous会话清理阶段”
- Selenium WebDriver:等待带有JavaScript(JS)的复杂页面加载
- 量angular器/selenium“无法findchromedriver”(在Windows上)
- 如何在Angularjs量angular器中使用命令行参数?
- 如何使用Selenium Webdriver下载任何文件并将其保存到所需的位置
- 在Selenium中inputEnter / Return键
- 使用Selenium WebDriver切换选项卡与Java
- 我如何让Selenium-WebDriver在Java中等待几秒钟?