2017-03-17 57 views
0

我使用Appium + Java自动化Tablet应用程序。在一个屏幕上,我有100多个字段(文本框+下拉菜单)自动执行哪个滚动视图。在Appium中滚动

要自动执行这些100多个字段,我已经在单独的Excel工作表中列出了所有的ID(该屏幕中的文本框和下拉列表)以及测试用例和测试数据。我的代码循环运行,选择测试用例,数据和相关ID并执行。所以,我的代码如下所示:

loop : for(int j = 1; j <= fieldCount; j++) 
{ 
    objElementRepositoryLibrary.setElementRepositoryDataLibrary(j); 

    switch(ElementRepositoryLibrary.getElementType()) { 

    case "AutoPopulated": 
     System.out.println(ElementRepositoryLibrary.getElementValue() + " is Autopopulated"); 
     break; 

    case "Dropdown": 
     ElementOperation.checkElementState(qdeDriver, ElementRepositoryLibrary.getLocator(), ElementRepositoryLibrary.getElementValue()); 

     if(ElementOperation.ElementAcceess.equals(false)) 
      System.out.println(ElementRepositoryLibrary.getElementValue() + " is disabled"); 
     else 
      objElementOperation.dropdownSelectListner(qdeDriver, ElementRepositoryLibrary.getLocator(), ElementRepositoryLibrary.getElementValue(), field[0][j-1]); 
     break; 

    case "Button": 
     ElementOperation.checkElementState(qdeDriver, ElementRepositoryLibrary.getLocator(), ElementRepositoryLibrary.getElementValue()); 

     if(ElementOperation.ElementAcceess.equals(false)) { 
      System.out.println(ElementRepositoryLibrary.getElementValue() + " is disabled"); 
      break loop; 
     } 
     else if(field[0][j-1].equals("")) 
      System.out.println("Checking for Null value"); 
     else if(field[0][j-1].equals("Yes") && ElementRepositoryLibrary.getFieldName().equals("QR Scanner")) 
      objElementOperation.buttonClickListner(qdeDriver, ElementRepositoryLibrary.getLocator(), ElementRepositoryLibrary.getElementValue()); 
     else if(ElementRepositoryLibrary.getFieldName().contains("Capture Document")) 
      objElementOperation.captureDocument(qdeDriver, ElementRepositoryLibrary.getLocator(), ElementRepositoryLibrary.getElementValue()); 
      break; 

    default : 
     objElementOperation.textboxSetListner(qdeDriver, ElementRepositoryLibrary.getElementType(), ElementRepositoryLibrary.getLocator(), 
       ElementRepositoryLibrary.getElementValue(), field[0][j-1]); 
     break; 
    } 
} 

问题:灌装几个(比如7)字段后,它给我NoSuchElementException异常,因为我在屏幕滚动到移动到下一个字段(它是这样:屏幕包含7个字段&您必须滚动才能查看下面的字段,并且在显示屏中查看之前,automator也不会识别该元素)。

我试过的是,我没有捕获NoSuchElementException并执行滚动操作。但这不是正确的方法,因为如果已经搜索的元素实际上不存在,那么它也会捕获NoSuchElementException并执行滚动操作。

建议一些很好的方法来消除这个问题。让我知道是否需要任何细节。

+0

是否有可能在下拉列表中的2个项目(或更多)将具有相同的值? –

+0

@DavidEp,不,它不会。 与该问题有关吗? – Ashish

+0

是的 - 我想我可以给你一个答案 –

回答

0

当我从你了解的代码工作正常,所以我会做,使这个测试完成:

  1. (正如你已经做了)按下拉列表和搜索项目 - 在这种你没有正确地忽略NoSuchElementException。
  2. 保存最后一个可见项目的名称(如果您需要任何代码片段帮助,请让我知道)
  3. 再次执行滚动并搜索项目 - >再次保存最后一个项目。
  4. 经过几次迭代后,最后一项将保持不变 - >这意味着我们在列表的末尾,在这种情况下,您的测试失败。
+0

我想你错误地理解了我的问题。 它不是具有长列表(我提到100多个元素)的选项的下拉列表。它实际上是包含**文本框**和**下拉**的“元素”。总之我的意思是,这是形式众多的领域。 – Ashish

+0

但是,您的回答给了我一个解决问题的方法。 让我试试。如果有效,我会发布正确的答案。 – Ashish