XPath は CSS スタイルについて何も知りません。属性を理解せず、単純な文字列として受け取ります。XML クエリ言語が CSS スタイルを理解するのは奇妙ですよね?
さらに、 はXPath に似getAttribute()
た構造を使用しますが、 XPath は使用しません! また、記号を介して属性を選択します。しかし、このロケーターを考えてみてください: . それは機能しますが、間違いなく XPath ではありません。@
"id=target@style"
また、内部で計算された値ではなく、明示的に設定された属性を返すstyle
ため、実際にstyle
要素に属性がない限り役に立ちません。style
属性が定義されている場合は、それを選択します。
Selenium 自体は正しい答えを提供できません (WebDriver にはgetCssValue()
がありますが、Selenium RC には対応するものはありません)。
したがって、Selenium RC で要素の計算されたスタイル (すべてのソースから計算された最終的な値) を取得する唯一の方法は、JavaScript を使用することです。
(少し編集した後) 何年もの間私のために働いていたスクリプトはこれです ( quirksmode.orgから):
function getStyle(id, stylePropJs, stylePropCss) {
var x = document.getElementById(id);
if (x.currentStyle)
var y = x.currentStyle[stylePropJs];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(stylePropCss);
return y;
}
IE ではプロパティの JavaScript 名が必要ですが、他のすべてのブラウザでは CSS 名が使用されることに注意してください。また、省略形のプロパティを使用することはできず、拡張されたプロパティを必ず使用する必要があります。したがって、あなたの場合:
String script = "var x = document.getElementById('target');" +
"if (x.currentStyle) var y = x.currentStyle['borderTopColor'];" +
"else if (window.getComputedStyle) var y = document.defaultView.getComputedStyle(x,null).getPropertyValue('border-top-color');" +
"y;";
String color = selenium.getEval(script);
これは、要素の上境界線の色を返します (境界線全体を取得するには、4 回呼び出す必要があります) target
。しかし、何を推測します!すべてのブラウザーは、異なる形式で色を返します。幸いなことに、少なくとも Java では、Color
簡単に再フォーマットできるクラスがあります。
String color = Color.fromString(color).asHex();
16 進数でエンコードされた色が格納されたので、それが緑色かどうかを簡単に確認できます。