WebDriver(C#)之十点使用心得
使用Selenium?WebDriver驅動瀏覽器測試的過程中多多少少會遇到一些折騰人的問題,總結了一部分,做下分享。
一、隱藏元素處理(element not visible)
使用WebDriver點擊界面上被隱藏的元素時,使用默認的IWebElement.Click()方法可能無法觸發Click事件,這時的修改方案可以采用執行JS的方式來實現。
| IWebElementwebElement = driver.FindElement(By.Id(elementId)); IJavaScriptExecutorjs = driverasIJavaScriptExecutor; js.ExecuteScript("arguments[0].click();",webElement); |
二、頁面跳轉后找不到元素(no such element)
頁面跳轉獲取新頁面的元素需要時間,所以需要在跳轉后增加等待時間,最通用的方法是判斷在某個時間內元素是否加載完成。
| driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); |
三、屏蔽動畫
如果網站使用了JQuery的動畫效果,我們在運行測試的時候可以disable JQuery的animation,代碼如下:
| IJavaScriptExecutorjs = driverasIJavaScriptExecutor; js.ExecuteScript("jQuery.fx.off=true"); |
四、不確定出現的元素處理
有的網站首次訪問時會彈出廣告,第二次訪問則不再顯示,這種情況可以自己調用WebDriver的IsElementPresent(Byby)方法進行判斷
| if(IsElementPresent(Byby))) ??{ ??????driver.FindElement(by).Click(); ???} |
五、Cookie登錄
自動化測試中,許多地方要求登錄,cookie能夠實現不必每次輸入用戶名和密碼進行登錄。
| Cookiecookie =newCookie(name,value,domain,path,expires); driver.Manage().Cookies.AddCookie(cookie); |
????????說明:參數分別為Cookie的名稱,內容,域,路徑,過期時間。
六、圖片上傳
參考:《Selenium(C#)實現圖片上傳的兩種方式》
七、帶placeholder屬性的輸入框Clear無效(invalid element state)
自動測試時,會出現某些帶有默認值的輸入框Clear()方法報錯,錯誤提示:invalid element state: Element is not currently interactable and may not be manipulated,此時需要檢查下輸入文本框是否帶有placeholder屬性,如果有則直接略過Clear方法,原因如下:
| placeholder定義和用法 placeholder屬性提供可描述輸入字段預期值的提示信息(hint)。 該提示會在輸入字段為空時顯示,并會在字段獲得焦點時消失。 |
八、切換窗口
參考《WebDriver(C#)之窗口切換》
| foreach(stringwinHandleindriver.WindowHandles)??//遍歷當前打開的窗口 ???{ ???????driver.SwitchTo().Window(winHandle); ???????if(driver.Title.Contains(title))?//title是新窗口的Title ??????{ ??????????break; ???????} ????} |
九、Iframe元素定位
如果一個頁面是一個html元素,只有一個head,一個body,使用driver.FindElement()可以查找頁面中任何一個元素。但是,頁面中如果嵌入<frame…../>是的頁面包含多個html元素,這種情況下就先要定位到元素所在的frame,然后再查找對應的元素,代碼如下:
| IWebElementframe. = driver.FindElement(By.XPath(".//*[@id='form1']/div[1]/div[1]/iframe")); driver.SwitchTo().Frame(frame); |
十、Firefox代*理設置
WebDriver每次啟動一個Firefox的實例時,會生成一個匿名的profile,并不會使用當前Firefox的profile。所以如果要訪問需要通過代*理的web服務,直接設置Firefox的代*理是沒用的,因為WebDriver啟動的Firefox不會使用該profile,需要在代碼里設置FirefoxProfile屬性,或者直接調用默認的profile。
| publicIWebDriverProxyConfig() ???????{ ???????????FirefoxProfilefirefoxProfile =newFirefoxProfile(); ???????????firefoxProfile.SetPreference("network.proxy.type",1); ???????????firefoxProfile.SetPreference("network.proxy.http","192.168.1.11"); ???????????firefoxProfile.SetPreference("network.proxy.http_port",8888); ???????????firefoxProfile.SetPreference("network.proxy.no_proxies_on",""); ???????????returnnewFirefoxDriver(firefoxProfile); ???????} |
或者啟動默認的profile
| stringpath =@"C:\Users\username\AppData\Local\Mozilla\Firefox\Profiles\a8xlln4m.default"; FirefoxProfileffprofile =newFirefoxProfile(path); driver =newFirefoxDriver(ffprofile); |
總結
以上是生活随笔為你收集整理的WebDriver(C#)之十点使用心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高铁改签后还能退票吗,手续费多少
- 下一篇: 新手如何网上开店 其实几分钟就能搞定