本文章轉載于搜狗測試
本文小編對之前Web功能自動化Case編寫過程中碰到的問題進行了整理總結,在此分享給大家,希望能夠對大家有所幫助。
問題一:在頁面查找元素屬性值為hidden時,無法找到該元素
1、原因分析
我們采用的是Selenium2,而selenium2與selenium1在元素查找實現是有區別的,selenium1中是通過JS注入的方式(不能支持鍵盤和鼠標操作)來完成瀏覽器相關操作,JS通過定位這個元素然后觸發onclick事件,完成元素點擊操作;而selenium2也就是webdriver,為了更好的模擬真實環境,它是直接利用了瀏覽器的native support來操作瀏覽器的,在元素點擊操作中會首先找到他的location,并在這個坐標點觸發一個左鍵點擊操作;因此,一些css屬性為hidden元素通過webdriver無法找到,提示元素無法找到;
2、解決方案
有兩種解決辦法,具體如下:
(1)通過dom查找元素后,再執行操作,具體JS代碼如下:
((JavascriptExecutor)driver).executeScript("document.getElementsByClassName('…')[0].click();");
(2) dom元素查找后修改元素屬性值,將hidden改為block,具體JS代碼如下所示:
(JavascriptExecutor)driver).executeScript("document.getElementById('…').style.display='block';")
問題二:使用第三方賬號QQ登錄時,無法切換到新窗口
1、原因分析
經仔細檢查,發現原來在QQ登錄框中有嵌入一個frame,如下圖:
2、解決方案
在切換窗口時,不能通過getWindowHandle()方式,需要使用frame("ptlogin_iframe")來進行窗口切換;
問題三:編寫完的Case通過chrome執行時,發現Case跳過未執行,報錯Case skipped
1、原因分析
系統環境變量中缺少chrome瀏覽器驅動程序chromedriver.exe
2、解決方案:
有兩種解決方案:
(1)手動下載chromedriver.exe,直接將chromedriver.exe放在”C:\Windows\System32”路徑下;
(2)手動下載chromedriver.exe,然后再編寫Case中指定chrome瀏覽器所用驅動程序:System.setProperty("webdriver.chrome.driver","../../chromedriver.exe");
問題四:Jenkins通過Java web start新建slave時,slave-agent.jnlp無法啟動
1、問題描述
無法啟動時,報錯信息如下:
2、原因分析
通過報錯窗口詳細資料,可以看到配置文件中主機配置使用的是localhost,而不是master地址;
3、解決方案
修改配置文件,將localhost改為master機器地址,如下所示:
問題五:如何設置元素加載等待時間
常web頁面加載時間受網絡、機器等因素影響,導致我們在進行自動化時經常會碰到所找元素提示不存在的情況,而實際頁面上是存在的,這就需要我們設置等待時間,等頁面元素加載完成后,在進行查找;
常用的設置等待時間方式有三種:
(1)線程休眠
thread.sleep(time)
(2)WebdriverWait結合ExpectedCondition
WebDriverWait wait = new WebDriverWait(driver,40);
WebElement we = wait.until(ExpectedConditions.elementToBeClickable(by));
(3)隱式等待時間設置
Webdriver.manage().timeouts().implicitlywait(20,TimeUnit,)
webDriver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
其中,第1種等待方式最low,設置時間后不管元素是否出現一直等待到設置到時間后才會繼續往下執行;第2、3設置方式都可以在設置時間內,對dom文件進行輪巡,元素出現即可往下執行,如果在達到設置時間還沒找到元素將會報超時錯誤;第三種方式,設置后會在整個webdriver實例周期起作用,導致在查找任何元素都可能出現等待時間,這樣便會使得case執行時間延長,因此,在此推薦使用第二種設置方式;