3

WebDriver.findElementとWebDriver.findElementsの代わりによく使用するカスタム検索メソッドがいくつかあります。これらのメソッドは、Byロケーターと正規表現の両方を含むカスタムロケーターオブジェクトを受け取り、Byロケーターと一致し、テキストが正規表現と一致する1つまたは複数のWebElementを返します。

これらは多くの場面で非常に役立ちました。WebElement.findElementとWebElement.findElementsに同じ機能を提供したいと思います。WebElementインターフェイスを実装し、これらの新しいfindメソッドを含む新しいクラスを作成することもできますが、それが実際に機能するかどうかについては混乱しています。結局のところ、FireFoxに対して実行すると、ドライバーが返す要素はFireFoxWebElementsです。IEに対して実行すると、それらはInternetExplorerElementsです。これらは両方ともWebElementを実装していますが、WebElementを実装する私のカスタムクラスとは完全に無関係ですよね?彼らはこの追加の機能を持っておらず、彼らは...そうではないので、私のカスタムクラスとして扱うことができませんでした。

WebDriver.findElement(s)はWebElementsの唯一の「ソース」であるため、つまり、WebElementsがコードに到着する基本的な方法であるため、カスタムのfindElement(s)メソッド(WebDriver.findElement(s)を呼び出す)を変更できますか? )、最終的に)私の特別なelement.findメソッドを含むWebElementの新しいカスタムラッパーを返しますか?そうすれば、私のコードに到着するすべてのWebElementは、必要な追加のfindメソッドを備えたこれらのカスタム要素になります。右?もしそうなら、そのようなラッパークラスはどのように見えるでしょうか?

4

1 に答える 1

4

はるかにクリーンなアプローチは、クラスをサブクラス化し、とのByカスタム実装を提供することです。アーキテクチャは、まさにこのタイプの拡張性のために設計されました。このサブクラスは、問題なく、両方のメソッドとメソッドに引数として渡すことができます。By.findElement()By.findElements()ByfindElement()findElements()WebDriverWebElement

または、カスタム検索メソッドを再利用することもできます。現在WebDriverオブジェクトを使用している場合は、引数を取るように変更することを検討してください。これは、 と の両方を拡張するSearchContextインターフェースです。およびメソッドの実際のソースです。WebDriverWebElementSearchContextfindElement()findElements()

于 2012-10-24T21:06:47.277 に答える