2016-12-02 9 views
0

内側のウィンドウ(つまりdiv)をスクロールする必要があります。このウェブサイトを見つけました How to scroll to an element inside a div?div内の要素をスクロールしますが、javaとseleniumを使用します

これはJavascriptを行う方法を示しています。私はexecutorを呼び出していますが、私はjava(heightなど)に値を渡すことはできないと思います。これは私のコードセクションです。基本的に、複数の要素を持つdivウィンドウがあります。いくつかは下に隠れていて、スクロールしない限り実際にはHTMLに表示されません。彼らが一度スクロールすると、私はそこに残ると信じています。だから私は大きな数字をスクロールできるだけでなく、あまりにも大きすぎるとエラーを起こさないと思ったので、可能な限りスクロールします。

私はこのように、一番上にスクロールして、その後に行わ:

String sid = rolesScroller.getAttribute("id"); 
    js.executeScript("document.getElementById('" + sid + "').scrollTop -= 1000"); 
    js.executeScript("document.getElementById('" + sid + "').scrollTop += 1000"); 
    waitForXPathVisibility("Scroll", ROLES_SCROLLER_X); 

これは大丈夫でしょうか、私は何とかちょうどその分だけスクロールしてスクロールする量を正確に把握する必要がありますか?

element.scrollHeightがあります。 scrollTopに可能な値は0からscrollHeightになりますか?ユニットは両方ともピクセルですか?

divの要素は、それ自体がノード(リスト値)です。展開することで、下に要素を増やすこともできます。値を検索するたびに、私はすべてを見ていることを確認するために上記を行う必要があります。私が今持っている方法は、ある程度までは機能しています。しかし、スクロールしてノードにアクセスしようとするとStaleElementExceptionが発生することがあります。しかし、私がwaitForStaleElement()を実行すると、要素が古くなっていないというエラーが表示されることがあります。 javascriptを実行した後に、すべてのアクションが完了したことを確認して古い要素が発生しないようにする方法はありますか?ジャワ/セレンからjavascriptのexecutorを使用している場合

  1. は、彼らが後でjasascriptエグゼキュータコマンドで使用できるようにするJavaに戻ってjavascriptの変数を渡す方法があります要約すると? (上記の-1000 + 1000の例がOKであれば、これは関係ありません)。

  2. スクロールされたdivの要素にアクセスしようとすると、javascriptコマンドが完了したことを確実にすることができます(divの1つの要素とdiv自体を調べてみました)。

答えて

0

スクロールするとコンテナが動的に構築されているようです。上部の最後の要素をscrollIntoViewとスクロールし、最後に別の要素を待ってください。

WebDriverWait wait = new WebDriverWait(driver, 5); 
JavascriptExecutor jse = (JavascriptExecutor)driver; 

// get the last element 
By lastChild = By.cssSelector("#list > div:last-of-type"); 
WebDriver elem = driver.findElement(lastChild); 

// scroll the last element at the top 
jse.executeScript("arguments[0].scrollIntoView(true);", elem); 

// wait for a new element at the end 
wait.until((WebDriver drv) -> !elem.equals(drv.findElement(lastChild))) 
+0

ありがとうございます。私はこれがうまくいくと思います。二人の心配。これまでのところウィンドウに収まるよりも多くのアイテムがあったので、新しい要素が現れるようになりました。しかし、それほど多くのリスト項目がない(それが起こるかどうかわからない)状況があった場合、それは待ち時間に間違いをもたらすでしょうか?おそらくそれは待つことができたが、新しい要素がなければエラーを出さないだろうか?私はそれが同じであるかもしれないと呼ばれた2回目だと思います? – Tony

+0

@トニー、テストケースにはロジックがあってはいけません。したがって、スクロールが新しい要素を返すかどうかを正確に知る必要があります。 –

関連する問題