2016-01-29 31 views
0

我遇到問題。我想隨機點擊按鈕「添加到購物車」 這裏是一個網站:demo.opencart -compare如何解決java.lang.IllegalArgumentException:bound必須爲正

我不知道我在做什麼錯。這裏是我的代碼:

List <WebElement> links = driver.findElements(By.xpath("//input[@value = \"Add to Cart\"]")); 
      Random gen = new Random(); 
      WebElement link = links.get(gen.nextInt(links.size())); 

      link.click(); 

而且我發現了以下錯誤:

java.lang.IllegalArgumentException: bound must be positive 
    at java.util.Random.nextInt(Random.java:388) 
    at pages.HomePage.chooseRandomItem(HomePage.java:112) 
    at testes.MainPage.chooseRandomItemToCart(MainPage.java:62) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) 
    at org.testng.TestRunner.privateRun(TestRunner.java:782) 
    at org.testng.TestRunner.run(TestRunner.java:632) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:268) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169) 
    at org.testng.TestNG.run(TestNG.java:1064) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177 

OK,我已經找到了問題。問題是與主要類與測試 沒有dependsOnMethod沒有工作,但它是正常的,或者我有一些錯誤?

'@Test 
    public void addToCompare(){ 
     hp.compareItems(); 
    } 

    @Test 
    public void goToComparePage(){ 
     hp.goToComparePage(); 


    } 
    @Test 
    public void usun(){ 
     hp.findAvailability(); 

    } 

    @Test(dependsOnMethods = { "goToComparePage" }) 
    public void chooseRandomItemToCart(){ 
     hp.chooseRandomItem(); 
    }' 
+0

更新我的答案。不要把它當成事實,但這是我對這個問題的想法。 –

回答

1

這正是錯誤所說的:IllegalArgumentException: bound must be positive

您的gen.nextInt()要求您傳遞正數值(我假設爲整數),但links.size()返回的是非正值。這可能是links.size()爲0或null,這意味着它無法從代碼的第1行找到任何元素。在這種情況下,問題出在下面一行:

List <WebElement> links = driver.findElements(By.xpath("//input[@value = \"Add to Cart\"]")); 

在這一點上有幾個選項:

首先,嘗試打印出links.size(),看看你會得到什麼。這將是第一步。

其次,如果 0或空的,然後嘗試調試您的第一行代碼。

更新:

我不能說這是正常的或不是因爲我不知道你hp.goToComparePage()包含的內容。但是,如果該方法應該將您帶到您嘗試實現的按鈕所在的比較頁面,那麼實際轉到比較頁面是有意義的。

我想一個例子是如果你想登錄到堆棧溢出。您顯然希望點擊「登錄」按鈕,但事先必須先發生的事情是首先進入堆棧溢出網站,然後點擊「登錄」按鈕。

+0

好的,所以我會用這個取決於方法 – BV360

0

IllegalArgumentException你得到,這聽起來像links.size()是0.我會確保你的第一行實際上返回至少1個鏈接。

相關問題