我需要滾動內部窗口(即div)。我發現這個網站 How to scroll to an element inside a div?div在元素內滾動,但使用java和selenium
但這顯示如何做Javascript。我打電話給執行者,但我不認爲我可以將值傳回給java(高度等)。這是我的代碼部分。基本上有一個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執行從Java /硒是有辦法通過JavaScript的變量回Java,使他們能夠在以後jasascript執行命令中使用? (如果-1000 +1000以上的示例是OK,那麼這沒關係)。
如何確保javascript命令在繼續之前完成,因此當您嘗試訪問滾動的div中的元素時,您將不會收到陳舊的元素(我試着檢查div中的一個元素,並且該div本身)。
謝謝。我相信這應該起作用。一對夫婦擔心。到目前爲止,每次都有更多的項目比適合窗口,所以一個新的元素將出現。但是,如果在某些情況下沒有那麼多的列表項目(不確定會發生什麼),它會在等待時給出錯誤嗎?如果沒有新的元素,也許它可以等待,但不會給出錯誤?既然我認爲第二次被稱爲可能是相同的? – Tony
@Tony,測試用例不應該有任何邏輯。因此,對於某些給定步驟,您應該確切知道滾動是否會返回新元素。 –