Selenium 图形用户界面自动化

Selenium 图形用户界面自动化,selenium,cucumber,bdd,testcomplete,cucumber-java,Selenium,Cucumber,Bdd,Testcomplete,Cucumber Java,我在生活中开始了一个新的角色。我曾经是一名前端web开发人员,但现在我开始测试web软件,或者更确切地说,自动化软件测试。我相信我会追求BDD(行为驱动开发)方法。我完全不知道该用什么,以及如何把它拼凑起来 正在使用/编写的代码是用Java编写的,用于为要测试的应用程序编写web界面。我有要运行的测试文档,但我一直很好奇如何实现自动化 我被引导到Cucumber,作为帮助实现自动化的“语言”之一。我做了一些研究,并在一个网站上找到了BDD工具/框架作品的概要。这有点帮助,但后来我对如何实现它有点

我在生活中开始了一个新的角色。我曾经是一名前端web开发人员,但现在我开始测试web软件,或者更确切地说,自动化软件测试。我相信我会追求BDD(行为驱动开发)方法。我完全不知道该用什么,以及如何把它拼凑起来

正在使用/编写的代码是用Java编写的,用于为要测试的应用程序编写web界面。我有要运行的测试文档,但我一直很好奇如何实现自动化

我被引导到Cucumber,作为帮助实现自动化的“语言”之一。我做了一些研究,并在一个网站上找到了BDD工具/框架作品的概要。这有点帮助,但后来我对如何实现它有点困惑。在很多测试GUI的BDD框架中,Selenium似乎是一个共同点,但它似乎仍然不能帮助描述该做什么

然后我遇到了这个词,我想这让我更加困惑。他们都测试GUI吗

我认为那个看起来像是一个软件包的软件是,还有一个,似乎是,SmartBear的另一个类似的应用程序,叫做,但我想我看到他们仍然使用Cucumber来创建它。还有一些其他的看起来也可以,但我想另一个问题是什么是最便宜的路线

我想我最大的问题是如何使这些测试更具动态性,因为UI/浏览器维度可以很容易地从一个系统到另一个系统进行更改,如何编写能够处理这一问题的自动化程序,并与BDD方法相结合

这里有人有什么建议吗?外面有人这样做吗


提前谢谢。

既然你觉得不知道从哪里开始,我将向你提示我写的一些博客,其中谈到了你的问题

一些类别可能对您有所帮助:

这篇很长很老的帖子也可能给你一些提示:


请注意,版本是过时的,但希望它能提供一些想法,如太期待。

我不是测试自动化方面的专家,但我目前正在研究这一部分。因此,让我分享一些想法,并希望在现阶段对您有所帮助。 我们已经使用selenium+cucumber+intellij来测试web应用程序。我们使用testcomplete+cucumber+intellij测试java桌面应用程序

关于web应用程序的测试,我们在web应用程序中提供了一个测试模式,它允许我们获得一些关于产品和环境的有用细节;也允许我们通过点击按钮并在测试模式下向测试面板输入文本来轻松触发事件


我希望这些对您有所帮助。

BDD体系结构

BDD自动化通常由几个层组成:

  • 自然语言步骤
  • 将步骤与其定义联系起来的接线
  • 步骤定义,通常访问页面对象
  • 页面对象,提供页面或小部件的所有功能
  • 通常通过GUI对正在执行的实际代码进行自动化
  • 自然语言步骤和步骤定义之间的连接通常由BDD工具(Cucumber)完成

    自动化通常使用自动化工具(Selenium)完成。有时,人们确实会跳过GUI,可能是针对API或MVC层。这取决于网页中的功能有多复杂。如果有疑问,请尝试硒。我为桌面应用程序编写了自动化框架;不管怎样,原则都是一样的

    保持其可维护性

    为了使步骤易于维护和更改,请将步骤保持在相当高的级别。这通常被称为“声明性”而不是“命令性”。例如,这太详细了:

    When Fred provides his receipt
    And his receipt is scanned
    And the cashier clicks "Refund to original card"
    And the card is inserted...
    
    想想用户试图实现的目标:

    When Fred gets a refund to his original card
    
    通常情况下,一个场景会有几个Givens或Thens,但通常只有一个(除非您有用户交互或时间流逝之类的东西,在这两个事件都需要说明行为)

    在这种情况下,您的页面对象可能是一个“ReturnPageObject”,或者如果太大,可能是一个“ReturnToCardPageObject”。此模式允许多个场景步骤访问相同的功能,而无需重复,这意味着如果功能的使用方式发生变化,您只需在一个地方进行更改

    不同的页面对象也可以用于不同的系统

    入门

    如果您是第一次攻击这个问题,那么从获取一个空场景开始,该场景只运行并通过,不做任何事情(将步骤设置为空)。当您完成此操作后,您将成功地连接Cucumber

    编写使场景运行的生产代码。(这与您通常的做法相反;通常情况下,您会先编写场景代码。不过,我发现这是一种很好的入门方式。)

    当您可以手动运行场景时,直接将自动化添加到步骤中(此时您只有一个场景)。使用您最喜欢的断言包(JUnit)获得您想要的结果。您可能需要更改代码,以便可以轻松地自动化代码,例如:为网页中的元素提供相关的测试ID

    一旦您运行了一个场景,尝试先编写任何后续场景;这有助于您考虑您的设计和您将要做的事情的可测试性。当您开始添加更多场景时,也开始将自动化提取到页面对象中

    一旦有了一些场景,就可以考虑如何处理不同的系统。尽可能避免使用大量的“如果”语句;这些都很难维持。注入页面对象的不同实现是可能的