2017-06-20 46 views
1

根據我所見的大多數答案,這裏的解決方案似乎是要走的路線Wait for page load in Selenium。這是有道理的,但它不適合我。我有一個用Angular JS編寫的網站,我正在嘗試瀏覽分頁列表中的結果。點擊下一頁的鏈接只是重新加載一個div,並不會實際觸發頁面加載。第1頁上的內容與第2頁不同,但就HTML而言,我不能檢查下一頁是否啓動。在測試Angular JS網站時,等待頁面加載Selenium和Phantom JS

作爲一個臨時修復,我已經放置了一個3秒的線程睡眠導航,以便線程喚醒時,phantomJS已經呈現了新的內容。這當然是一個不好的解決方法,因爲它通常不到一秒鐘,但是寒冷可能需要幾天時間。

我想知道是否角度與dom溝通的方式允許phantomJS讀取它並找出狀態?

+1

後是否有你爲什麼不使用的理由量角器?也是關於AngularJS(1x)或Angular(2/4)的這個問題? –

+0

即時通訊使用一個定製的工具,用於許多網站,所有這些都不是angularJS。這是第一個,該工具不適用於它,所以我需要做一些調整,以支持網站加載時的頁面加載 –

+1

這可能沒有太大的幫助,但這裏是量角器的waitForAngular實現。 https://github.com/angular/protractor/blob/3d98a1668138d36681bf305c9ea67dd1eea38899/lib/clientsidescripts.js#L135如果您正在測試使用非SeleniumJS驅動程序,明確的睡眠可能是目前最好的行動方案我的想法是。 –

回答

0

通常當標籤被刷新時,它們變得陳舊。您可以等待<div>標籤使用ExpectedConditions

IWebElement div = driver.FindElement(div locator); // locate the refreshing <div> 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.StalenessOf(div)); 

變得陳舊,現在你需要檢查是否有物品之前的名單中刪除

wait.Until(d => 
{ 
    ReadOnlyCollection<IWebElement> items = d.FindElements(items locator); // locate the items list 
    return items.Count > 0; 
});