Selenium刷新頁面的處理方法

在實際項目的自動化測試中,咱們常常會遇到進行某操做後頁面會被刷新,定位元素找不到的狀況。css

現總結下,實踐中個人解決方法:java

當操做後頁面會刷新或是JS加載時,都要增長等待刷新時間,保證在頁面中可以定位到對應的元素。app

方法一:顯式等待。推薦使用。ide

顯式等待,就是明確的要等到某個元素的出現或者是某個元素的可點擊等條件,等不到,就一直等,除非在規定的時間以內都沒找到,那麼就跳出Exception。若是後續代碼還要用到這個WebElement,則代碼能夠這樣寫,以下:測試

//等待進入菜單管理頁面

WebDriverWait menuwait = new WebDriverWait(driver,20);

  WebElement menuopenNode = menuwait.until(new ExpectedCondition<WebElement>(){ 

    @Override 

    public WebElement apply(WebDriver d) {

     WebElement menulastProject = driver.findElement(By.cssSelector("#admin-module-search-form"));

     return menulastProject; 

 }});

這裏,20是要等待的秒數。若是沒有知足until()方法中的條件,就會始終在這裏wait 20秒,依然找不到,就拋出異常。ui

若是後續代碼不須要用到這個WebElement,則代碼能夠這樣寫,以下:code

(new WebDriverWait(driver,30)).until(ExpectedConditions.elementToBeClickable(By.linkText("菜單用戶權限")));

方法二:強制等待orm

//刷新頁面等待時間3秒

    try{

    Thread.sleep(3000);

    }

    catch(Exception e){

    e.printStackTrace();

}

方法三:隱式等待。不推薦使用。這個方法我徹底沒有使用到。ci

driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);

隱式等待, 此處的隱式等待是針對Driver 每次執行命令的 最長執行時間也能夠理解爲超時時間,  一些人對此處有誤解,認爲是讓Driver等一段時間,  確實某些時候能讓Driver等一段時間, 可是影響是全局的,每次Driver執行 找不到元素都會等待此處設置的時間,  假設某處將此值設置的太長,必須在執行完成以後還原回來,不然判斷一個元素是否存在的時候,就會遇到很坑爹的問題。element

參文:http://www.tuicool.com/articles/u63Eve

相關文章
相關標籤/搜索