うまくはないですが、ある程度はできます。
配置には、WebElement を使用できますgetLocation()
(Java ドキュメントですが、すべての Selenium バインディングに同じメソッドが存在します)。ほとんどのブラウザーではレンダリングが若干異なることに注意してください。そのため、古い IE で作業する場合、ピクセル単位で完璧であるとは期待しないでください。また、CSS で定義された最初のフォントが見つからず、別のフォントが使用された場合など、配置が若干異なる場合があります。この方法に大きく依存しないでください。しかし、テストを健全にし、環境を安定させることができれば、うまくいくでしょう。
aligningのために、ある要素が視覚的に別の要素の内側にWebDriver
あることをアサートする単純な Java メソッドを作成しました。
偽陰性があってはなりませんが、内側の要素が視覚的に内側にあるが、その (目に見えない) 実際の境界線が「見えている」場合には、偽陽性が発生する可能性があります。ただし、実際の経験では、この問題に遭遇したことはありません。素敵な Web サイトは適切に動作し、そのようなハックは必要ないからです :)。それでも、ちょっとハックであり、Selenium はこの種の作業用に設計されていないため、より複雑なチェックを実装するのは難しいかもしれません。
public static void assertContains(WebElement outerElem, WebElement innerElem) {
// get borders of outer element
Point outerLoc = outerElem.getLocation();
Dimension outerDim = outerElem.getSize();
int outerLeftX = outerLoc.getX();
int outerRightX = outerLeftX + outerDim.getWidth();
int outerTopY = outerLoc.getY();
int outerBottomY = outerTopY + outerDim.getHeight();
// get borders of inner element
Point innerLoc = innerElem.getLocation();
Dimension innerDim = innerElem.getSize();
int innerLeftX = innerLoc.getX();
int innerRightX = innerLeftX + innerDim.getWidth();
int innerTopY = innerLoc.getY();
int innerBottomY = innerTopY + innerDim.getHeight();
// assures the inner borders don't cross the outer borders
final String errorMsg = "ughh, some error message";
final boolean contains = (outerLeftX <= innerLeftX)
&& (innerRightX <= outerRightX)
&& (outerTopY <= innerTopY)
&& (innerBottomY <= outerBottomY);
assertTrue(errorMsg, contains);
}