Ruby 富内核应用程序的QA自动化

Ruby 富内核应用程序的QA自动化,ruby,selenium,automation,sproutcore,Ruby,Selenium,Automation,Sproutcore,我们有一个使用sproutcore开发的丰富UI应用程序。我们正在尝试使用Ruby中的SeleniumWebDriver来自动化页面。对于动态生成的id和隐藏项,我们发现很难识别某些元素。应用程序很复杂。开发人员说他们不能为隐藏的项目或框架添加唯一的层id。对于静态页面,它们添加了唯一的层id或类名 我想从我这里的朋友那里了解他们在sproutcore应用程序中使用的自动化是什么? 他们如何解决这些问题 欢迎使用任何指针。即使web元素 动态生成的id和隐藏项我们发现很难识别一些 一种解决方案是

我们有一个使用sproutcore开发的丰富UI应用程序。我们正在尝试使用Ruby中的SeleniumWebDriver来自动化页面。对于动态生成的id和隐藏项,我们发现很难识别某些元素。应用程序很复杂。开发人员说他们不能为隐藏的项目或框架添加唯一的层id。对于静态页面,它们添加了唯一的层id或类名

我想从我这里的朋友那里了解他们在sproutcore应用程序中使用的自动化是什么? 他们如何解决这些问题


欢迎使用任何指针。

即使web元素

动态生成的id和隐藏项我们发现很难识别一些

一种解决方案是询问开发人员是否可以为他们添加命名模式,这样就可以动态生成最后一个字符。通过这样做,您可以使用以下一些定位方法:


    • 使用SproutCore的一种方法是使用SproutCore视图树来识别元素,而不是通过层ID或类。例如,考虑这个基本主页,

      MyApp.mainPage=SC.Page.create({
      主窗格:SC.mainPane.extend({
      子视图:['header','mainContent','footer'],
      标题:SC.ToolbarView.extend({
      布局:{高度:44},
      子视图:['headerButton'],
      头部按钮:SC.ButtonView.extend({
      布局:{centerX:0,centerY:0,高度:40,宽度:100},
      标题:“单击此处”
      })
      }),
      主要内容:SC.View.extend({
      布局:{顶部:44,底部:33},
      //等等。
      
      虽然我们事先不知道这些元素的层ID,但我们知道它们在JavaScript中的父子关系。例如,如果我需要页面中的某些元素,我可能会像这样提前获取它们

      //检索当前页面的目标视图。
      var mainPane=MyApp.mainPage.get('mainPane'),
      header=mainPane.get('header'),
      headerButton=header.get('headerButton'),
      //……等等。
      //然后检索一个要对其执行操作的元素。
      var buttonLayer=headerButton.get('layer');//返回一个DOM节点
      //或检索要执行操作的元素id。
      var buttonLayerId=headerButton.get('layerId');//返回自动生成的id
      
      虽然我没有使用Selenium的第一手经验,但似乎可以使用WebDriver实例方法运行一些简单的查找,返回所需的元素或所需元素的id


      最后,请记住,某些视图可能具有动态变化的子视图,特别是
      SC.CollectionView
      子类,如
      SC.ListView
      。在这种情况下,一旦您以父视图为目标,就可以使用特定于该父视图的方法(如
      itemViewForContentIn)轻松访问所需的子视图dex(idx)
      来获取列表的项目视图。

      我使用selenium(通过Jenkins)来自动化对a的一些QA测试,根据我的经验,通常只需向Sproutcore对象添加特定的类名,然后使用selenium中的xpath表达式来针对这些类

      例如:

      bottomRightView: SC.View.design({
              classNames: ["bottomRightView"],
              layout: { top: 60, width: 299, bottom:50, right: 15, zIndex: Maps.RIGHT_TOOL_BOX_PANE_ZINDEX },
              childViews: "resultsView noResultsView buttons featureView".w(),
      
      Xpath表达式:

      xpath=//div[contains(@class,'bottomRightView')]
      
      始终可以使用/@if(debug)语句从生产版本中排除这些类名

      上述应用程序的Selenium IDE脚本示例: