2017-03-13 37 views
0

私はテーブルデータを持つページを持っています。すべてのデータが1ページに収まらないスクロール原因があります。私は最後の行が見えないと主張したい。私は、コードを持っている:Seleniumは、表示されていないときに表示が真であると主張しています(下にスクロールする必要があります)

var element = _driver.FindElement(By.Id("last-element")); 
element.Displayed // !!! true 

私はそれはおそらく正しく解析されています知っている、スタイルなどによって隠されていないが、確かにそれはユーザーには見えないのです。

私が作成している:

static bool IsVisible(IWebElement webElement) 
{ 
    if (webElement.Displayed == false) 
    { 
     return false; 
    } 

    RemoteWebElement remote = (RemoteWebElement) webElement; 

    return remote.Location.Y == remote.LocationOnScreenOnceScrolledIntoView.Y; 
} 

をしかし、それも見知らぬ人行動です。コードがLocationOnScreenOnceScrolledIntoViewに到達すると、ブラウザはその場所にスクロールします。

セレン3.3、ChromeDriver 2.28(FirefoxDriver 0.14に同じ)

私は何をしないのですか?

+0

Iこの使用してJavaScriptのメソッドを実行します - あなたはそれをやって幸せになるでしょうか? –

+0

@ marwaha.ksどうやって答えを書いてください。私はそれがバックエンドコードで行うことができることを望んだが、JSはまだ良いです。 –

答えて

1
public bool Displayed(string elementTagName, string elementAttribute, string value) 
    { 
      var result = false; 
      try 
      { 
       var elementDisplayed = ((IJavaScriptExecutor)driver).ExecuteScript($"return $(\"{elementTagName}[{elementAttribute}=\'{value}\']:visible\").length").ToString(); 
       result = string.Compare("0", elementDisplayed, StringComparison.OrdinalIgnoreCase) == 0; 
      } 
      catch (Exception) 
      { 
       //ignore exception 
      } 

      return result; 
    } 

は、要素が表示されていない場合はtrueを返し、要素が表示されている場合はfalseを返します。

だけ、のようなので、中の要素の変数を渡すDisplayed("div","class","rawr");

+0

作業するには、等しいに変更する必要があります。 string.Equals( "0"、elementDisplayed、StringComparison.OrdinalIgnoreCase)== false; –

+0

そこにあるセレクタ( ":visible")もtrueを返すので、うまくいきません。しかし、それはセレンの作品のようにHTMLを理解する方法に問題があることを私に導きます。ありがとう –

+0

@ KrzysztofMorcinekあなたのソリューションを投稿できますか? –

関連する問題