我有问题。我想随机点击按钮"添加到购物车" 这是一个网站: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();
}'
答案 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个链接。