簡體   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