繁体   English   中英

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 循环会增加计数器 var,假设 r=1,然后尝试单击 ID 为“r1”的单选按钮。 如果不存在id为“r1”的元素,则抛出NoSuchElementException,在这种情况下,当前while循环迭代应该停止并开始下一次迭代(r = 2,尝试单击元素“r2”,如果不存在,开始下一个while循环)。

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

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

代码有两个问题:

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

  2. 没有抛出异常 - 您没有记录异常。 您只是在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM