2017-04-10 19 views
0

このコードを使用して要素をブラウザビューに表示すると、ほとんどの場合動作します。要素があるしかし 要素が画面上にあるときのMoveToElement

protected void MakeVisible(IWebElement link, bool always) 
    { 
     var actions = new Actions(this.Driver); 
     actions.MoveToElement(link).Perform(); 
     ... 

だけ(たとえばが50%であるボタン)を画面上では、それはしませんが、クリックイベントを登録するのに十分な画面上ではありません。

enter image description here

(スニップの下部には、ブラウザのビューポートの下部にある)

どのように私はこのエッジケースを扱うことができますか?

これは、FireFoxドライバを使用して発生しました。

答えて

1

これまではこのような現象は見たことがありません。一般に、要素をクリックすると、それがオフスクリーンの場合、ビューポート(自動的に)がスクロールされて表示され、クリックされます。私はあなたに私の最高の推測を与え、うまくいけば、あなたが調査し、うまくいけば問題を解決できるいくつかのアイデアを与えるでしょう。

だから、.MoveToElement()が要素の中央に移動するという問題があると思います。問題の要素の中心がページ上にありますが、完全には見えないためクリックできない場合は、要素全体がページ上にあることを確認することです。私がこれを行うために考えることの1つの方法は、MoveToElement(IWebElement, Int32, Int32)を使用することです。オフセットは、要素の左上隅からのオフセットです。これを使用して左上と右下に移動する場合、その組み合わせは要素を完全に表示してからクリックする必要があります。左上は0,0、右下はIWebElement.Sizeを使用して検出され、要素の幅と高さが取得されます。

機能は、この

public void ShowElement(IWebElement e) 
{ 
    Actions action = new Actions(Driver); 
    action.MoveToElement(e, 0, 0).MoveToElement(e, e.Size.Width, e.Size.Height).Build().Perform(); 
} 
のようになります。
関連する問題