Javascript 我们如何评估自动化web应用程序前端的难度?

Javascript 我们如何评估自动化web应用程序前端的难度?,javascript,html,selenium,protractor,watir-webdriver,Javascript,Html,Selenium,Protractor,Watir Webdriver,是否有任何通用指南可以证明web应用程序前端自动化的困难 例如,一个这样的指导原则可以是所有的“critical”元素都有ID属性,其值不会经常更改。还有其他类似的指南吗?以下是您问题的答案: 老实说,目前还没有这样的官方指南可以证明web应用程序的前端是否易于自动化。但该行业的坚定支持者有以下几点建议: 如果您的Web应用程序是用HTML5构建的,那么据观察,纯硒最适合gecko、chromedriver或IEDriverServer 如果您的Web应用程序是使用AngularJS构建的,那么

是否有任何通用指南可以证明web应用程序前端自动化的困难


例如,一个这样的指导原则可以是所有的“critical”元素都有ID属性,其值不会经常更改。还有其他类似的指南吗?

以下是您问题的答案:

老实说,目前还没有这样的官方指南可以证明web应用程序的前端是否易于自动化。但该行业的坚定支持者有以下几点建议:

  • 如果您的Web应用程序是用HTML5构建的,那么据观察,纯硒最适合gecko、chromedriver或IEDriverServer
  • 如果您的Web应用程序是使用AngularJS构建的,那么据观察,Protector/Jasmine组合工作得更好
  • 关于您期望的指南,
    所有“重要”元素都有id属性,其值不会“频繁”更改。
    是基本要求之一。根据最佳编程实践,网页上的所有元素都应具有唯一的
    id
    name
    等属性。但在实时情况下,可以观察到一些元素在HTMLDOM中没有唯一的
    id
    name
    。有时观察到元素具有动态的
    id
    。在这种情况下,我们可能需要开箱思考,以借助其他定位器,例如
    linkText
    css
    xpath
    以及
    regex
    ,它们同样可以唯一地标识元素

  • 如果这能回答您的问题,请告诉我。

    这确实是一个非常棘手的问题。我会试一试,但请注意,我几乎不会用这个来抓表面

    免责声明:我现在写的东西,特别是考虑到web向前发展/变化的速度(新的标准、新的框架、新的抽象层次,而不是旧的编程原则),在几年内很可能会过时或不好的实践


  • WebElement定位器(我个人对此事的看法)
  • 当你给出更改
    ids
    &
    类的例子时,我不能否认,我的眼睛有点转动。但你给了我们第一个分类:

    • 对生产代码具有提交权限的QA自动化工程师:

      我们正处于21世纪,处于人类技术最进步的时代,我们仍然认为我们应该禁止我们的QA使用承诺权。该死

      QA自动化团队应根据先前经过深思熟虑的记录的策略创建自己的自动化属性集

      QA自动化团队应
      能够根据其自动化议程的要求,在产品代码中添加/删除/更改ID
    属性

    您的
    WebElement
    mappings应该是这样的(这是我编写的
    CucumberJS
    elements模块中的内容):

    上述
    WebElements
    具有以下特性:同质的优化的(链接的标签不超过2个),可伸缩的动态的
    connectqa device
    属性的值由
    {deviceType}/code>在
    ng repeat
    中生成(Angular web app)),易于识别/在编写自动化测试用例时使用,因为方案明显

    您的
    WebElement
    映射不应该像这样:

    'add friend email input error mark':'#scroller-bulk-invite div.form-group.mb10.wrapper.email-f.error div.invalid',
    'add friend name input error mark':'#scroller-bulk-invite div.form-group.wrapper.name-f.error div.invalid',
    'plus button':'#statusStaging div.staging-holder div.devices-staging.ng-isolate-scope ul.actions li'
    
  • 只能访问实时代码的QA自动化工程师:

    这里我们来讨论一个新的问题:您的开发人员是否希望实现您以前所设想的
    WebElement
    属性策略

    如果,则您可以尽最大努力利用现有资源创建最佳的
    WebElement
    定位策略。 如果,那么我们很幸运。有人刚刚帮你卸下了沉重的负担。现在你可以专注于其他事情,比如优化自动化装置


  • Web框架(尤其是JS框架)
  • 如今,大多数web框架通过不同的指令/组件/装饰器等将大量逻辑注入HTML。其中一些在自动测试运行的不同时间或整个测试执行过程中对您可见

    !!!注意:我强烈建议您在创建
    WebElement
    映射时远离这些映射。您将面临以下问题:

    • 片状测试(相对于
      $(document).ready()
      标记,大多数属性都是在不同的时间通过JS添加的。如果您的方法中没有严重的显式/隐式等待,那么您的测试中可能会出现一些严重的片状)
    • 'Element not found'错误(当今框架中的这些指令/组件/装饰器非常容易更改。开发人员可能只是添加/更改/删除您在映射和PUUUFF!中引用的特定指令/组件/装饰器,您的回归将转到s@%&。)

      示例:(角度)
      .ng范围
      .ng如果
      .ng点击
      ,等等。这些应该永远不在你的
      网页元素
      定位器中。否则,你只是在要求它

    待续…

    请参阅:SO的期望是,用户提出问题时,不仅要进行研究,以回答自己的问题,而且要分享这些信息
    'add friend email input error mark':'#scroller-bulk-invite div.form-group.mb10.wrapper.email-f.error div.invalid',
    'add friend name input error mark':'#scroller-bulk-invite div.form-group.wrapper.name-f.error div.invalid',
    'plus button':'#statusStaging div.staging-holder div.devices-staging.ng-isolate-scope ul.actions li'