Selenium and Java:While循环无法按预期工作

问题描述 投票:0回答:4

我在使点击动作自动化方面遇到了挑战,我正在努力了解解决方案中的逻辑出了什么问题。

我的挑战是,我需要单击许多不同的单选按钮之一。

每个单选按钮的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”,从下一个循环开始。)>

假设我们到达元素“ r20”,而该元素实际上确实存在,则应单击按钮,不引发异常,因此while循环继续并按下break命令,而while循环终止。 >

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

我在使点击动作自动化方面遇到了挑战,我正努力了解解决方案中的逻辑出了什么问题。我的挑战是我需要单击许多不同的收音机中的一个...

java selenium while-loop selenium-chromedriver nosuchelementexception
4个回答
0
投票

不确定,可能需要更多信息,但是我会有所不同

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");
  }
}

0
投票

请使用此:

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;
    }

}

0
投票

代码有两个问题:

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


-1
投票

在上面的代码中,您尝试将字符串附加为int值,但是在python中,您不能像java那样做。如果要在字符串后附加int值,则应使用str()并传递int值例如:int counter = 0;

while(true) {
counter++;
try {
    driver.findElement(By.id("r" + str(counter))).click();
} catch (NoSuchElementException e) {
    continue;
}
break;
© www.soinside.com 2019 - 2024. All rights reserved.