[英]Selenium and Java: While loop not working as expected
我在自动化点击操作方面遇到了挑战,我正在努力理解我的解决方案中的逻辑有什么问题。
我的挑战是我需要单击多个不同的单选按钮之一。
每个单选按钮的 id 为“r”+ a_number。
我不知道对于任何给定的测试,有哪些可用的“r”+a_number 选项,所以我写了这个 while 循环,旨在单击第一个可用的单选按钮:
int counter = 0;
while(true) {
counter++;
try {
driver.findElement(By.id("r" + counter)).click();
} catch (NoSuchElementException e) {
continue;
}
break;
}
这没有按预期工作 - 有人可以帮助我理解出了什么问题吗?
注意:我是Java新手
更新
我的目标是单击第一个现有的单选按钮,因此 while 循环会增加计数器 var,假设 r=1,然后尝试单击 ID 为“r1”的单选按钮。 如果不存在id为“r1”的元素,则抛出NoSuchElementException,在这种情况下,当前while循环迭代应该停止并开始下一次迭代(r = 2,尝试单击元素“r2”,如果不存在,开始下一个while循环)。
假设我们到达元素“r20”并且该元素确实存在,那么应该单击按钮,不会抛出异常,因此while循环继续并命中break命令,while循环终止。
但是,当前的行为是,即使元素不存在,也不会处理异常,while 循环终止,但没有单击任何内容。`
代码有两个问题:
循环只运行一次 - 在第一次迭代本身之后,您正在使用break
语句打破循环。
没有抛出异常 - 您没有记录异常。 您只是在 catch 块中执行“继续”语句。 您不需要该语句,因为无论如何循环都会进入下一次迭代(在您删除 break 语句之后)。
您应该使用此代码:
int counter = 0;
boolean foundElement = false;
while(!foundElement) {
counter++;
try {
driver.findElement(By.id("r" + counter)).click();
foundElement = true;
} catch (NoSuchElementException e) {
//assuming you want to log exception. Otherwise you can leave the catch block empty.
System.out.println(e);
}
}
请使用这个:
int counter = 0;
while(true) {
counter++;
boolean elementFound = false;
try {
driver.findElement(By.id("r" + counter)).click();
elementFound = true;
} catch (NoSuchElementException e) {
continue;
}
if (elementFound){
break;
}
}
不确定,可能需要更多信息,但是,我的做法略有不同
int counter = 0;
boolean ifNotFound = true;
while(ifNotFound) {
counter++;
try {
driver.findElement(By.id("r" + counter)).click();
ifNotFound = false;
} catch (NoSuchElementException e) {
System.out.println("exception caught");
}
}
我只是想单击,如果成功,则将 while 循环设置为 false 并且它将中断。 您捕获的异常可能不是正在抛出的异常,因此您可以尝试将其更改为通用Exception
,如果可行,那么您可以根据需要捕获更具体的一个或多个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.