2016-01-02 25 views
0

我在一頁中有1200行的列表,我根據某些條件選擇行。大多數情況下,我的情況發生1000次,所以硒試圖逐一選擇1000行,但有一段時間它選擇500,800時間,1000時間。有沒有什麼辦法使它穩定?在硒中是否有任何穩定的方法來選擇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是我的陣列上存儲只是沒有。的ID來獲得所有行的選擇。所以大多數情況下,我的尺寸接近1000,這是正確的。

TRCount總是正確的。問題是,當它檢查條件的listOfTrueId存在的數據,並做++

TRcount也列出元素,並幫助我從1數到TR

但是,當循環選擇行,它隨時停止。據我瞭解我的瀏覽器一次顯示12行,從下一個硒自動向下​​滾動,然後停在任何一行。

UPDATE:

我也是剛剛纔知道,問題是TD標籤數據加載,當它開始加載數據有文本稱爲「載入中...」,所以我的腳本得到這個「Loading ...」作爲TD的價值,並基於它選擇較少的行。所以我怎麼能告訴我的腳本,如果TD的價值是「Loading ...」然後等待一段時間再次檢查相同的TD獲取實際數據。

我已經在上面的腳本中隱含了等待,但這似乎沒有幫助。

+0

爲什麼'sleep',爲什麼'count'? 'count = k',所以可以只是k。另外這個for循環並沒有真正地告訴發生了什麼。 –

+0

@NorbertvanNobelen - 讓我分享完整的腳本。 –

+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...")); 
    
+0

非常感謝... –

相關問題