除了實現自己的多線程,Selenium是否有機制等待並行的多個元素過時?Selenium能夠並行等待多個元素陳舊性(Java)嗎?
我使用這個等待單個元件
WebDriverWait wait = new WebDriverWait(driver, 3); //3 = timeout
wait.until(ExpectedConditions.stalenessOf(element));
我有同時重新創建30個元素,我不將不阻塞30 * 3秒的代碼。
感謝
除了實現自己的多線程,Selenium是否有機制等待並行的多個元素過時?Selenium能夠並行等待多個元素陳舊性(Java)嗎?
我使用這個等待單個元件
WebDriverWait wait = new WebDriverWait(driver, 3); //3 = timeout
wait.until(ExpectedConditions.stalenessOf(element));
我有同時重新創建30個元素,我不將不阻塞30 * 3秒的代碼。
感謝
硒沒有做到這一點。
我的建議是:挑選最長的元素並等待那個元素。
這一切都是並行發生的,所有元素需要等待的時間相同,這就是問題 – user3364652
@ user3364652如果這一切都平行發生,爲什麼不等待** one **元素,然後只驗證所有其他元素也是陳舊? –
弗洛裏安指着我認爲的正確方向 –
wait.until
只有在條件滿足之前才阻止代碼。超時是最長的時間。
WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.stalenessOf(element));
在你的代碼,如果ExpectedConditions.stalenessOf
是真的在1秒鐘後wait.until
將1第二塊。如果ExpectedConditions.stalenessOf
在第一次檢查中已經成立,則代碼將立即繼續。
使用NgWebDriver:https://github.com/paul-hammant/ngWebDriver。
您可以等到所有頁面元素準備就緒後,必須使用Angular的網站庫
您不必等待30 * 3秒。每個線程幾乎立即開始正確?如果是這樣,那麼你的總等待時間將只有3秒。 – Raghuveer
是的,我問如何做,如果我不會自己實現多線程。 – user3364652
您可以將第三個參數添加到webdriverwait構造函數中,該參數將輪詢條件之間的默認休眠時間更改爲0.5秒。將其縮小到100毫秒(構造函數需要的毫秒數)。在編寫並行解決方案之前,測量單線程正在進行的時間。如果你想要一個併發的方法,我建議你使用java.util.concurrent包的Future和Callable類。更容易用這個返回主程序的值。 – Grasshopper