2016-05-25 6 views
0

を実行する上でランダムに発生しますIndexOutOfBounds Excptionを返します。私はこのスクリプトを10回実行し、6回はその例外を与え、4回はそのプロセス全体を実行します。続きIndexOutOfBounds例外は、私は、Webページ上のセレンwebdriverをスクリプトに取り組んでいますwebdriverをスクリプト

は、例外のスタックトレースです:

java.lang.IndexOutOfBoundsException: Index: 77, Size: 0 
    at java.util.ArrayList.rangeCheck(Unknown Source) 
    at java.util.ArrayList.get(Unknown Source) 
    at pageObjects.WorldBankData.retrieveCountryData(WorldBankData.java:172) 
    at testCases.SampleTest.getCTex(SampleTest.java:35) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 
    at org.testng.TestRunner.privateRun(TestRunner.java:774) 
    at org.testng.TestRunner.run(TestRunner.java:624) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:261) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 
    at org.testng.TestNG.run(TestNG.java:1048) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176) 

at pageObjects.WorldBankData.retrieveCountryData(WorldBankData.java:172)は私のスクリプトでWebElement elem =countryLinks.get(i);を指します。

誰かがこの問題に直面している理由を教えてもらえますか?

+1

「driver.findElements([a href * = '/ country /']」));は時々0要素を返します。 – Zircon

+0

countryNamesのサイズが76よりも大きくないことがありますか? –

+0

index = 77には何かがありますか?ちょうどhtmlコード –

答えて

0

達成しようとしていることを伝えるのは難しいです。私はあなたのメソッドをきれいにし、範囲外のインデックスの世話をした。 icountryLinksの合計数を超える値と等しい場合にcountryLinks.get(i)が呼び出されるため、例外が発生しました。したがって、もしわずか77カ国しかなければ、countryLinks.get(78)が呼び出されたので、i=78が呼び出されて例外がスローされます。

@Test 
public void retrieveCountryData() throws Exception { 
    WebDriver driver = new FirefoxDriver(); 
    WebDriverWait wait = new WebDriverWait(driver, 15); 
    By countrySelector = By.cssSelector("a[href*='/country/']"); 
    By countryDetailVerify = By.cssSelector("countryDetailVerify?"); 

    driver.get("http://data.worldbank.org/income-level/HIC"); 
    List<WebElement> countryNames = driver.findElements(countrySelector); 

    for (int i = 76; i < countryNames.size() - 1; i++) { 
     List<WebElement> countryLinks = driver.findElements(countrySelector); 
     wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(countrySelector)); 

     WebElement elem = countryLinks.get(i); 
     JavascriptExecutor js = (JavascriptExecutor) driver; 
     js.executeScript("window.scrollTo(" + elem.getLocation().x + "," + (elem.getLocation().y - 100) + ");"); 

     String countryText = elem.getText(); 
     System.out.println("The Country is: "+ countryText); 
     elem.click(); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(countryDetailVerify)); 

     driver.navigate().back(); 
    } 
} 
+0

コードを実装しましたが、IndexOutOfBound例外が発生することがあります。 それは私のインターネット接続に関連するので、ページの読み込み時間の問題ですか? – Uziii

関連する問題