InvalidSelectorException の変更

⚠️ InvalidSelectorExceptionWebDriverException を継承するように変更されました

Java および C# の Selenium 4.8.2 より前のバージョンでは、無効なロケーターが要素の特定に使用された場合、結果として得られる動作はバインディングで一貫性がありませんでした。

たとえば、次のコードを確認してみましょう

ArrayList<Class<? extends Exception>> expectedExceptions = new ArrayList<>();
        expectedExceptions.add(org.openqa.selenium.NoSuchElementException.class);
        expectedExceptions.add(org.openqa.selenium.StaleElementReferenceException.class);
        expectedExceptions.add(org.openqa.selenium.ElementNotInteractableException.class);
        expectedExceptions.add(org.openqa.selenium.InvalidElementStateException.class);
        
return new FluentWait<>(driver)
      .withTimeout(Duration.ofMillis(ELEMENT_IDENTIFICATION_TIMEOUT))
      .pollingEvery(Duration.ofMillis(ELEMENT_IDENTIFICATION_POLLING_DELAY))
      .ignoreAll(expectedExceptions)
      .until(nestedDriver -> {
         nestedDriver.findElement(By.xpath("invalid-xpath")).click;
      });

この変更前 の期待される結果は、ドライバーがタイムアウトになるまで待機し、その後 InvalidSelectorException をスローすることでした。

壊れた/無効なセレクターは決して自己修復しないため、これはあまり意味がなく、したがってすぐに例外をスローする必要があります。

これは、2022 年 8 月 17 日の TLC ミーティング で議論および合意され、プルリクエスト 11727 および次の コミット を通じて実装されました。

上記の変更により、無効なセレクターは InvalidSelectorException をすぐにスローします。

無効なロケーターを処理中にこの例外がスローされることを想定していない場合、これは後方互換性に影響を与える可能性があることに注意してください。

SeleniumHQ をフォローして最新情報を入手してください!

ハッピーテスティング!