在selenium中有没有稳定的方法可以选择1000多行

时间:2016-01-02 17:06:44

标签: java selenium-webdriver

我在一个页面中有1200行的列表,我根据某些条件选择行。大多数情况下,我的情况发生真实1000次,所以硒试图逐个选择1000行,但有时候选择500,有些时间800,有些时间1000.有什么方法可以让它稳定吗?

当我检查我的情况时,它总是有正确的大小来选择行。但是硒不能一直以相同的方式工作。

代码:

        public static List<String> listOfData;
        public static int x=0;

driver.get(URL);

        WebDriverWait wait = new WebDriverWait(driver, 60);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Xpath1)));


           List<WebElement> TRcount = driver.findElements(By.tagName("tr"));

           System.out.println(TRcount.size());
           List<WebElement> TDcount = null;

           if(TRcount.size()>0)
           {
               for(int i=2;i<TRcount.size();i++)
               {


                  listOfData = new ArrayList<String>();
                  TDcount = TRcount.get(i).findElements(By.tagName("td"));

                  for(int j=0; j<TDcount.size(); j++) 
                  {

                      if(TDcount.get(j).getText().equals("Loading..."))
                      {
                          driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

                      }


                        listOfData.add(TDcount.get(j).getText());

                  }      
                        if(TDcount.size()>0)
                          {


                              if(GlobalMethods.checkIfDataExists((listOfData)))
                                  {
                                       listOfTrueId.add(i);
                                       x++;
                                  }
                        }


               }      

           int count=2;
           for(int k = 0; k <= listOfTrueId.size(); k++)
           {

                Thread.sleep(3000);
                TRcount.get(count).click();
                //System.out.println(TDcount.get(0).getText() +" : "+ "Pass"); 
                //TDcount.get(0).click();
                 count++;


           }   



    }

这里 listOfTrueId 是我的数组,它只存储没有。 ids来获取所有行。所以大多数情况下,我认为它的大小接近1000,这是正确的。

TRCount 始终是正确的。问题是它检查数据的条件是否存在,并在 listOfTrueId

中执行++

TRcount 也是列表元素,帮我计算TR从1到

但是当它循环选择行时,它会随时停止。据我了解我的浏览器,它一次显示12行,从下一个selenium自动逐个向下滚动但随后它停在任何一行。

  

更新:

我刚才知道这个问题是TD标签数据加载,当它开始加载数据时,它有文本名为&#34;正在加载...&#34; ,所以我的脚本获取这个&#34;正在加载...&#34; 作为TD的值,并根据它选择较少的行。那么如何告诉我的脚本,如果TD的值是&#34;正在加载...&#34; ,请等待一段时间再次检查相同的TD以获取实际数据。< / p>

我已经在上面的脚本中进行了隐式等待,但这似乎没有帮助。

1 个答案:

答案 0 :(得分:1)

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);您实际上没有等待,您只需设置驱动程序尝试在driver.findElement中找到元素的时间。

尝试更改

if(TDcount.get(j).getText().equals("Loading..."))
{
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

其中一个:

  • 如果您有定位器

    //Explicit wait
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.invisibilityOfElementWithText(By locator, "Loading..."));
    
  • 如果文本正在更改为所有元素中的相同文本

    //Explicit wait
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.textToBePresentInElement(TDcount.get(j), someText));
    
  • 或者只是等待循环

    long start = System.currentTimeMillis();
    while ((System.currentTimeMillis() - start) / 1000 < 30 && TDcount.get(j).getText().equals("Loading..."));