🐡

【超便利】do..while文!! 条件が false になるまでループ処理

2020/11/08に公開

概要

現在TestCafeというツールを用いてE2Eテストを書いています。

実装したい内容は、

  1. 表示されているリストに指定の文字が入っている場合、そのリストの詳細画面に移動して終了。
  2. 表示されているリストに指定の文字が入っているリストがない場合、次のページへ行く。
  3. 次のページへ移動した場合(表示されているリストに指定の文字が入っているリストがない場合)、1.2. の動作を繰り返す。

今回指定している文字は "承認済" です。

リストはこんな感じで20件毎にページネーションされています。

do..while文 を使う前のコード

  
    // 現在のページに承認済リストが存在する場合
    if (await ApprovedList.exists) {

      // 最初に検知した承認済みリストのプレビューページへ遷移
      await t.click(approveList);
      
    // 現在のページに承認済リストが存在しない場合
    } else {
    //次のページへ移動
      await t.click(nextPageBtn);
    //ここからどんどん"if文"をネストしている!(同じ処理を何度も書いている)
      if (await firstApprovedList.exists) {
       await t.click(approveList);
      } else {
        await t.click(nextPageBtn);
        if (await firstApprovedList.exists) {
         await t.click(approveList);
        } else {
          await t.click(nextPageBtn);
        }
      }
    }
  }

見てもらったらわかる通り問題だらけです。笑

現状の問題点としては、

  • if文をネストしまくっている。
  • 同じ処理を何回も書いてしまっている。
  • 承認済みのリストがなく、次のページに遷移するボタンもない場合にエラーする。

上記の問題点を解決する方法を探していました。

などなど、いろいろググりました!
(ググる時のワードセンスないのは知ってます。笑)

そこで発見したのが、、、、

do..while文!!!

ドンピシャで全ての問題点を解決してくれました。

do..while文

do..while文の書き方はこんな感じ。

do{
 繰り返したい内容
}
while(終了条件)

while(終了条件)の内容がfalseになる場合に終了し、
while(終了条件)の内容がtrueの場合は、do{繰り返したい内容}を何度でも繰り返してくれます。

現在の問題点をもう一度確認しておきます。

  • if文をネストしまくっている。
  • 同じ処理を何回も書いてしまっている。
  • 承認済みのリストがなく、次のページに遷移するボタンもない場合にエラーする。

do..while文を使用した場合のコードがこちら!!

 
  do {
    // 状況が承認済となっているリストが存在する場合
    if (await firstApprovedList.exists) {
     // 詳細画面へ
      await t.click(approveList);
     
    } else {
    承認済みのリストがない場合、次のページへ
      await t.click(nextPageBtn);
    }
  // 次のページへ遷移するボタンがある限りdo{}内の動作を繰り返す(await nextPageBtn.exists → true)
  // 次のページへ遷移するボタンがない場合終了する(await nextPageBtn.exists → false)
  } while (await nextPageBtn.exists);

いや、便利すぎる。。。。
全ての問題点が一撃で解決されていしまいました!!!

神のコードを生み出してしまったと錯覚しましたね。笑

Discussion