Atoms が Selenium IDE に登場

サイモンのGoing Atomic: Why?Going Atomic: How で述べられているように、Selenium と WebDriver の統合の一部は、両者間で共通のコードを共有することです。

サイモンのGoing Atomic: Why?Going Atomic: How で述べられているように、Selenium と WebDriver の統合の一部は、両者間で共通のコードを共有することです。そして、Selenium IDE の 1.0.10 リリース以降、この統合されたコード「atoms」が含まれるようになりました。

このリリースの初期ユーザーの中には、assertAttribute と verifyAttribute を駆動する atom がスクリプトを壊していることに気付いている人がいます。この記事では、その「理由」を説明し、修正方法も提案します。

HTML 仕様には、真偽値属性という概念があり、値ではなく、そこにあることによって何かを行う属性のことです。checkedselected は、その 2 つの例です。オプションで、これらの真偽値属性に名前と同じ値(checked="checked")を与えることもできます。それでもページは検証されますが、実際には、ブラウザは属性が存在することだけを気にします。

1.0.10 より前は、人々が次のようなことをするのは珍しくありませんでした。

  assertAttribute | checkbox@checked | checked

これは、ID または名前が checkbox のチェックボックスの checked 属性の値を取得し、値がチェックされていない場合、スクリプトを失敗させます。

ただし、1.0.10 では、チェックされていても失敗します。これは、checked が真偽値属性であり、true を返すか、属性が存在しないという例外をスローするようになったためです。上記のステップをやり直して、真偽値属性が設定されていることを確認すると、次のようになります。

  assertAttribute | checkbox@checked | true

ありがたいことに、真偽値属性との実際のやり取りのほとんどは、checked、disabled、hidden、selected に焦点を当てており、これらのケースでは assertAttribute を使用することは実際には正しいことではありません。代わりに、Selenium API は使用するためのラッパーを提供しています。

checkedassertChecked(locator)、assertNotChecked(locator)、verifyChecked(locator)、verifyNotChecked(locator)
disabledassertEditable(locator)、assertNotEditable(locator)、verifyEditable(locator)、verifyNotEditable(locator)
hiddenassertVisible(locator)、assertNotVisible(locator)、verifyVisible(locator)、verifyNotVisible(locator)
selectedassertSelected*(locator, pattern)、assertNotSelected*(locator, pattern)、verifySelected*(locator, pattern)、verifyNotSelected*(locator, pattern)

適切なラッパーがない真偽値属性の不在を確認するのは少し面倒です。この例では、真偽値属性 multiple が名前が elephants の select 要素にないことを確認しています。

  assertEval | this.browserbot.findElement("css=select[name=elephants]").getAttribute("multiple"); | null

これを頻繁に行う場合は、プラグイン内のユーザー拡張機能にラップして、次のようにすることをお勧めします。

  assertBooleanAttribute | css=select[name=elephants]@multiple | false
  assertBooleanAttribute | css=select[name=elephants]@multiple | true

これで、Selenium IDE 1.0.10 が広く配布されるようになったときに、間違いなく発生するであろう「一体なぜ私のスクリプトが壊れたんだ!?!?!」という問題のいくつかに対応できることを願っています。

最終更新日:2021年8月7日: ディレクトリ名の変更 (e9895f27c26)