我最近一直在使用Selenium(测试一个ExtJs应用程序),虽然很多方面很棒,有三件事让我感到非常悲伤:
无法直接点击按钮以外的元素。这让我编写了一堆Robot代码来移动鼠标。这有效,但有点脆弱,如果你在测试运行时触摸鼠标,你就会被搞砸了。我尝试了Selenium论坛,看看是否有更好的方法,并且无处可去。我认为(但不确定)这是Selenium JS注射技术的一个基本限制。
在很多情况下无法控制'id'属性设置为的内容。这种情况发生在ExtJs中,有些元素允许你设置它,有些则没有,有些元素可以,但属性会在你不期望的地方结束。在某些情况下,您最终必须使用XPath。使用带有ExtJs的XPath有点可怕,因为ExtJs创建了大量嵌套的DIV。您有时也可以使用CSS定位器(在ExtJ中也可以控制不一致)。 (顺便说一下,这显然不是Selenium问题本身)。
Selenium启动FF的时间太长 ......比正常的人类FF启动时间长,每次测试大约2秒,这转化为持续几次的测试分钟,太长了。
我简要地看了一下Watij,BadBoy和其他几个网络功能测试应用程序,但没有一个看起来像Selenium那样好。 (Selenium测试的方式可以用Java编写,并通过jUnit运行,真的很棒)。还有一些商业选择,但它们超出了我的预算,无论如何都无法保证它们会更好。
赞赏任何想法或建议。
答案 0 :(得分:4)
关于3: Selenium在启动时将firefox配置文件复制到临时文件夹。如果您没有指定自定义配置文件,Selenium可以使用默认配置文件,该配置文件可能会使用您不需要进行测试的插件来膨胀。使用'-p'启动Firefox并为Selenium创建一个新的配置文件并将其复制到您可以指向selenium的位置。这应该加快测试速度。
更新: Firefox配置文件位置/ Windows:%APPDATA%\ Mozilla \ Firefox \ Profiles
答案 1 :(得分:3)
我的想法:
在某些情况下,click
还不够,但您当然不应仅限于按钮。您可能希望进一步尝试定位器。
为什么需要设置元素的id
属性?我有测试ExtJS应用程序的经验,问题通常是定位具有动态设置ID的元素。在我看来,这是ExtJS而不是Selenium的问题。使用contains
,starts-with
和substring
使用智能XPath技术可以使您的定位器更加可靠。如你所提到的,CSS定位器通常也很有帮助。
正如amarsuperstar所说,你不需要在每次测试之前启动Firefox。如果这样做,您可能需要考虑使用browserSessionReuse
命令来加速启动浏览器。或者,您可以使用Selenium Grid并行运行测试。
最后,非常值得研究将在即将发布的Selenium 2 alpha版本中使用的WebDriver API。根据我的经验,Firefox的启动时间会缩短,click
等命令会得到很大改善。< / p>
答案 2 :(得分:2)
我不确定前两点,但至于第三点,我认为你不需要为每次测试启动浏览器。您可以使用Seleium服务器(某处的selenium目录中的jar)然后将测试指向例如localhost:6554,只会打开浏览器一次。
有了这个,您可以在脚本中启动服务器的步骤 - &gt;运行所有测试 - &gt;终止服务器,您的测试只会有一个浏览器会话。
答案 3 :(得分:2)
我的经历(希望有用;)
更新:正如Dave Hunt提醒我的那样,有时我不得不使用mousedown / mouseup动作代替“点击”
我发现了许多使用CSS定位器导航的聪明方法(selenium支持大多数CSS 3)。此外,您可以使用类似xpath=id('myid')//div['@class='foo']
的xpath(ID部分至关重要)。
我也从来没有经历过这个。也许您可以提供有关您的环境的一些细节?
答案 4 :(得分:0)
感谢所有答案的人,我真的很感激。我昨天花了一整天时间来处理这些事情,我想补充几点意见:
ExtJS放置东西的方式确实很难找到元素。例如,您指定的“id”通常出现在DOM中2-3-4个项目上方的元素上方。实际行为似乎根据元素的类型而有很大差异。为了未来的Se-ExtJs测试人员的利益,我有一半的想法写下这一切,因为它看起来非常试错,乏味。但最终似乎可以能够很好地工作。当然,这绝不是对Se的反思。无论它在ExtJs上反映得不好,我都不太确定,但令人惊讶的是有多少DIV标签甚至是相当简单的项目。
这可能是一个'很明显',但对于其他任何人这样做,我建议使用XPath来舒服。一开始似乎有点迟钝但几个小时之后,如上所述,你几乎可以找到任何东西,并且几乎总是以不过于脆弱的方式。
节日快乐!
答案 5 :(得分:0)
Selenium是TestPlan测试框架的后端之一,它可以为您解决其中的一些问题。
我们似乎没有任何问题。我们的前端使用许多不同的定位器语法来定位屏幕上的任何元素。虽然如果您的页面很复杂而且Selenium真的无法做到,那么我们也无法帮助您。
我们将所有内容都基于XPath,所以过了一段时间你就会习惯它。您可以在XPath中使用各种可能有帮助的快捷语法。但是,在TestPlan脚本中,您还可以在XPath中使用变量扩展,这使得它们更易于维护。
TestPlan会在可能的情况下缓存浏览器会话,而不是以其他方式请求。这有点速度,但只有这么多,因为通常你想要每次测试都有一个新的会话。