2012-02-16 9 views
3

WebElement#findElement(By)By.cssSelectorと使用すると、要素全体が検索されます。しかし、私は現在のビューのみで選択を制限したい。私はセレンが "スクロールバーを使う"ことを許可したくありません。どうすればこれを達成できますか?現在のビューに要素を配置します

+0

別のCSSセレクタ/ XPath式を書いて以来、私は本当にこのユースケースに興味があります。 –

答えて

1

これを行う方法は、ページ上のすべての要素を取得し、それらをビューポートから除外する方法です。

WebElement.getLocation()は、このための基礎ツールです。

ページの左上隅にある場合(読み込み後のデフォルト)、window.innerHeightwindow.innerWidth(ほとんどのブラウザがIE9 +です)を使用できます。あなたは、ビューポートがデフォルトの位置になることを確かに言うことができない場合

// assuming JS is enabled for this instance of driver 
JavascriptExecutor js = (JavascriptExecutor)driver; 

int viewportWidth = (Integer)js.executeScript("return window.innerWidth;"); 
int viewportHeight = (Integer)js.executeScript("return window.innerHeight;"); 

List<WebElement> list = driver.findElements(By.cssSelector("whatever")); 
for (Iterator<WebElement> iter = list.iterator(); iter.hasNext();) { 
    WebElement elem = iter.next(); 
    Point p = elem.getLocation(); 
    if ((p.getX() > viewportWidth) || (p.getY() > viewportHeight)) { 
     iter.remove(); 
    } 
} 

(座標[0、0])、あなたは条件にwindow.mozInnerScreenXwindow.mozInnerScreenY(Firefoxのは、3.6以上必要)を追加することができます。あるいは、恐らくより良い、window.scrollXwindow.scrollYです。

部分的に表示された要素を含めるかどうかを定義し、それに応じてアルゴリズムを調整する必要もあります(レスキューにWebElement.getSize()!)。

検索後にビューポートが変更されても問題が解決しない場合は、window.scroll()で元の位置に戻ってみてください。

関連する問題