ソフトウェアエンジニアをしている守屋です。テストを提供するため、Selenium(Webdriver)を採用しています。よって標準化されており、同じコードでクロスブラウザテストができる...と期待したいところですが、現実には様々な場面で互換性に悩まされます。「テキストフィールドの値をクリアする」という課題についてお伝えします。テキストフィールドの値をクリアするユーザ名の変更が正しく動作するか、などのテストでは、テキストフィールドにすでに入力されている値を一度クリアする必要があります。用意されており、その動作は標準で定義されています。""をセットする」という内容です。作られたフォームで「テキストが消えたように見えるが内部のステートは変化していない」といったことが起こります。自動テストの挙動によってテストが正しく行えない時は、自動テストの振る舞いをユーザが行う操作に近づけると、幅広いアプリケーションで想定通りのテストが行えるはずです。ネタバレクロスブラウザでinput要素もしくはcontenteditable要素の値をクリアするには、以下のコードが必要です(サンプルコードにはPythonを使用します)。element)ActionChains(self.driver).send_keys(Keys.DELETE).perform()以下にこのコードに行き着くまでの過程を紹介します。キーを使って文字を消してみましょう。いう挙動があり、削除に失敗することがわかりました。場合に要素のクリアに時間がかかってしまうため、別の方法を検討しました。Aでテキストを全選択してから削除してみます。値がクリアされません。上がっていたので見てみます。再現しないよ、とのことです。動作しないのは同じ原因だと考えられます。残念ながら近いうちの対応を期待するのは難しそうです。テキストを全て選択してから削除する(2)早くも全ブラウザ共通でユーザのように値をクリアする方法がなくなってしまいました。異なる操作をするのはテストの安定性に影響する可能性があるので避けたいところです。そこで、完全にユーザの振る舞いを再現することを諦め、テキストを選択するところだけJSを使います。JSでテキストを選択する方法はいくつかあるので、1つ1つ試してみます。使うOK!ということで、冒頭に掲載したコードに行き着きます。