Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于浏览器的测试工具,哪个没有损坏?_Javascript_Unit Testing_Testing_Selenium - Fatal编程技术网

Javascript 基于浏览器的测试工具,哪个没有损坏?

Javascript 基于浏览器的测试工具,哪个没有损坏?,javascript,unit-testing,testing,selenium,Javascript,Unit Testing,Testing,Selenium,很抱歉这里有争议的标题 我已经使用Selenium和基于Selenium的库(如Capybara)进行了相当多的基于浏览器的测试(针对JS的网页)。让测试套件始终如一地工作一直是一件非常棘手的事情。是的,我知道,与其到处插入对sleep()的调用,不如等待DOM元素变得可见,或者满足其他条件,yadda yadda。这一切都很好,确实有点帮助。如果不是因为 如果不是在我自己编写Selenium代码之前,我咨询的公司雇佣了一家专门编写Selenium测试套件的公司。他们派了一个据说是硒专家的人,他

很抱歉这里有争议的标题

我已经使用Selenium和基于Selenium的库(如Capybara)进行了相当多的基于浏览器的测试(针对JS的网页)。让测试套件始终如一地工作一直是一件非常棘手的事情。是的,我知道,与其到处插入对
sleep()
的调用,不如等待DOM元素变得可见,或者满足其他条件,yadda yadda。这一切都很好,确实有点帮助。如果不是因为

如果不是在我自己编写Selenium代码之前,我咨询的公司雇佣了一家专门编写Selenium测试套件的公司。他们派了一个据说是硒专家的人,他为我们的web应用程序编写了一套完整的测试套件。需要我告诉你我们实际使用测试套件时发生了什么吗

我的结论是,像Selenium这样的工具所使用的整个方法都受到一个大的竞争条件的制约。您有一个测试过程和一个单独的浏览器过程,通过套接字进行对话。测试过程向浏览器发送查询以找出DOM的状态,并且当浏览器继续运行时,计算要执行的操作。然后它向浏览器发送一条单独的消息,模拟点击或按键等

如果您曾经编写过多线程程序,那么您知道这是行不通的。这是一场“先检查后行动”的比赛。如果测试过程可以冻结浏览器中的JS执行,查询其状态,发出模拟的点击/击键,然后解冻浏览器,那么就可以了。(就像使用锁来保护多线程程序的关键部分。)

我能想到的绕过竞争条件的唯一方法是用JS编写每个测试用例。当然,这排除了跨多个页面导航的测试用例。您还需要一种在每个测试用例开始时将页面重置为“干净”状态的方法

有人知道一种在浏览器JS“apps”中进行测试的工具/方法吗?这种工具/方法允许像我这样的凡人编写100%一致运行的测试套件,,而不撕掉我所有的头发

(另外,从Selenium的经验中得出的另一个结论是:许多免费的jQuery插件在人类使用页面时都会出现错误,这仅仅是因为它们不能像Selenium那样快速地点击!)

它被称为“Selenium”。它工作正常,但还不够好,主要是因为它完全是用JavaScript构建的。Selenium项目继续进行,采用了另一个名为“WebDriver”(又名Selenium 2.0)的系统,并与浏览器进行了更紧密的集成,现在浏览器作者正在将驱动程序构建到浏览器中或作为紧密耦合的附加组件(例如OperaDriver、ChromeDriver)。

您看到了吗,它可以在phantomjs上运行(无头webkit浏览器)还是slimerjs(无头壁虎浏览器)


语法简洁友好,它使用名为evaluate()的方法在浏览器上下文中顺序执行测试.

我将尝试解决您的问题,即自动化驱动工具和浏览器本身是两个独立的过程,因此自动化脚本受您提到的竞争条件的影响

这正是我倾向于在过程中编写Web应用程序自动化脚本的原因,因此它们与浏览器本身在同一个核心UI事件循环中运行

有一个很好的工具:。你确实需要一些C#技能来创建一个自动化脚本。另一方面,有了像
async/await
这样的语言特性,编码
WebBrowser
自动化是一件轻而易举的事,因为它自然是异步的(没有那些讨厌的
线程.Sleep
和轮询循环)。除此之外,您还可以执行所有常规自动化任务,例如:

  • 将测试shell作为GUI应用程序或应用程序运行


自您回答此问题以来,出现了一项新服务。基于浏览器的UI测试不需要编码。您可以选择在应用程序编辑器中执行手动步骤,也可以使用Ghost Inspector Chrome扩展仅记录您与正在测试的web应用程序的交互


Ghost Inspector还对每个测试运行进行视频记录,以便您可以准确地看到测试代理浏览器看到的内容。有关于每个测试运行的详细日志,包括它在路径上单击/访问的每个URL的列表。您可以使用触发器URL触发Ghost Inspector测试,以便将其集成到连续部署过程中

这是如何回答这个问题的?听起来你只是想澄清“硒”的含义没有提到问题的核心点。我的观点是,OP要求的是原始设计,而他要求的正是需要修复的设计缺陷。罗斯,你可能想尝试重新表述你的答案。你在评论中提出的观点完全不符合你的回答措辞。如果Selenium RC有缺陷,Selenium WebDriver也有缺陷,只是方式不同而已。你知道其他工具,或者使用这些工具的不同方式吗,它们不会遇到我问题中提到的问题吗?我最近刚刚听说过。你有没有用CasperJS编写过测试套件?你的体验如何?它能重新加载pag吗是的,我已经为各种网站的流编写了超过15个测试套件。这非常符合逻辑,本质上是一个要执行的步骤列表。至关重要的是,它等待页面加载,等待DOM准备就绪,然后才开始执行测试。它肯定可以在每次测试之前重新加载页面-如果您使用s单元测试,e