Selenium 和 Java:While 循环未按预期工作

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 循环递增计数器变量,假设 r=1,然后尝试单击 ID 为 "r1" 的单选按钮。如果不存在id为"r1"的元素,则抛出NoSuchElementException异常,此时当前的while循环迭代应该停止并开始下一次迭代(r=2,尝试点击元素"r2",如果不存在,开始下一个while循环。

假设我们到达元素 "r20" 并且该元素确实存在,那么应该单击按钮,不会抛出异常,因此 while 循环继续并点击 break 命令,而 while循环终止。

然而,当前的行为是,即使元素不存在,while 循环终止,但没有点击任何内容,也不会处理异常。`

请使用这个:

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 ,如果可行,那么您可以捕获更具体的一个或多个,如果您需要.

代码有两个问题:

  1. 仅循环 运行 一次 - 您正在使用 break 语句打破循环,在第一次迭代之后。

  2. 没有抛出异常 - 您没有记录异常。您只在 catch 块中执行 'continue' 语句。您不需要该语句,因为无论如何循环都会进入下一次迭代(在您删除 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);     
    }
}