如何修复java.lang.IllegalArgumentException:bound必须是正数

时间:2016-01-29 20:57:59

标签: java testing selenium-webdriver webdriver

我有问题。我想随机点击按钮"添加到购物车" 这是一个网站:demo.opencart -compare

我不确定我做错了什么。这是我的代码:

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
好的,我发现了问题。主要问题是测试 没有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();
    }'

2 个答案:

答案 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或null,则尝试调试第一行代码。

<强> 更新

我不能说这是正常与否,因为我不知道你的hp.goToComparePage()包含什么。但是,如果该方法应该带您进入您尝试实施的按钮所在的比较页面,那么实际进入比较页面是有意义的。

我想一个例子就是你想登录Stack Overflow。您显然想要点击&#34;登录&#34;按钮,但事先必须发生的事情是先实际进入Stack Overflow网站,然后点击&#34;登录&#34;按钮。

答案 1 :(得分:0)

从您IllegalArgumentException获取,听起来links.size()为0.我会确保您的第一行实际上至少返回1个链接。