2016-01-29 105 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个链接。