2016-04-29 82 views
2

我正在尋找一種向下滾動到頁面的方式,該頁面在滾動時加載內容,在我開始使用Selenium與其進行交互之前加載所有內容。正確使用selenium document.readyState

我發現下面這個代碼發佈了c#,我改成了Java。它編譯並運行。但即使頁面到達末端,它也不會脫離循環

 Boolean readyStateComplete = false; 
     while (!readyStateComplete) 
     { 
      JavascriptExecutor executor = (JavascriptExecutor) driver; 
      executor.executeScript("window.scrollTo(0, document.body.offsetHeight)"); 
      readyStateComplete = (String) executor.executeScript("return document.readyState") == "complete"; 
     } 

我對JavaScript沒有太多瞭解。這怎麼可以糾正?

+1

試**。equals()**方法代替* == *我的意思是 readyStateComplete =((String)executor.executeScript(「return document.readyState」))。equals(「complete」); –

+0

做到了。如果你把它作爲答案發布,我會接受它 – Arya

+0

好吧@Arya謝謝。 –

回答

1

請再試.equals()方法代替== i表示參考平等

readyStateComplete = ((String) executor.executeScript("return document.readyState")).equals("complete"); 

==試驗(它們是否是相同的對象)。

.equals()測試值是否相等(它們在邏輯上是否爲 「equal」)。

0

一種更好的方式向下滾動頁面,等待要加載的內容是使用executeAsyncScript,然後等待滾動高度變化,爲國家做好準備:

WebDriver driver= new ChromeDriver(); 
driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS); 
JavascriptExecutor js = (JavascriptExecutor)driver; 

driver.get("http://imgur.com/"); 

final String JS_SCROLL_DOWN = 
    "var callback = arguments[0], page = document.documentElement, height = page.scrollHeight; " + 
    "window.scrollTo(0, height); " + 
    "(function fn(){ " + 
    " if(page.scrollHeight != height && document.readyState == 'complete') " + 
    "  return callback(); " + 
    " setTimeout(fn, 30); " + 
    "})();"; 

js.executeAsyncScript(JS_SCROLL_DOWN);