首先生成一個Web對象html
IWebDriver driver = new FirefoxDriver(); //打開指定的URL地址 driver.Navigate().GoToUrl(@"http://12.99.102.196:9080/corporbank/logon_pro.html"); //關閉瀏覽器 Driver.quit();
網銀瀏覽器兼容性測試過程當中,關閉瀏覽器後會有對話框,此問題解決方法以下:windows
public void logout() { System.Diagnostics.Process[] myProcesses; myProcesses = System.Diagnostics.Process.GetProcessesByName("IEXPLORE"); foreach (System.Diagnostics.Process instance in myProcesses) { instance.Kill(); } }
//須要將driver強制轉換成JS執行器類型 ((IJavaScriptExecutor) driver).ExecuteScript("js文件名");
driver.FindElement(By.Id("cp1_btnModify")).click(); By.ClassName(className)); By.CssSelector(selector) ; By.Id(id); By.LinkText(linkText); By.Name(name); By.PartialLinkText(linkText); By.TagName(name); By.Xpath(xpathExpression);
3.1根據元素id定位並操做數組
//向指定的文本框輸入字符串500001 Driver.FindElement(By.Id("amount")).SendKeys("500001");
3.2根據元素classname定位並操做瀏覽器
//點擊classname爲指定值的按鈕 Driver.FindElement(By.ClassName(「WotherDay」)).click();
3.3根據元素的linktext定位並操做性能
Driver.FindElement(By.LinkText(「選擇帳號」)).click();
3.4根據元素的Name定位並操做測試
Driver.FindElement(By.Name(「quality」)).perform();
3.5使用CssSelector定位並操做ui
string order = "#resultTable.result_table tbody tr.bg1 td.center a"; driver.FindElement (By.CssSelector(order)).click();
3.6使用Xpath定位並元素並操做spa
//使用多個屬性定位元素 Driver.FindElement(By.XPath("//input[@id='submit' and @value='下一步']")).click(); //使用絕對路徑定位元素 string path = "/html/body/div[4]/div/div/div[2]/table/tbody/tr/td/a"; Driver.FindElement(By.Xpath(path)).click();
各方法使用優先原則:code
優先使用id,name,classname,link;次之使用CssSelector();最後使用Xpath();orm
由於Xpath()方法的性能和效率最低下。
//清空文本框clear() Driver.FindElement(By.Id("tranAmtText")).clear();
//在文本框中輸入指定的字符串sendkeys() Driver.FindElement(By.Id("tranAmtText")).SendKeys(「123456」);
//移動光標到指定的元素上perform Actions action=new Actions(driver); action.MoveToElement(Find(By.XPath("//input[@id='submit' and @value='肯定']"))).Perform();
//點擊按鈕/連接click() Driver.FindElement(By.XPath("//input[@id='submit' and @value='下一步']")).click();
//等待頁面元素加載完成 //默認等待100秒 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100)); //等待頁面上ID屬性值爲submitButton的元素加載完成 wait.Until((d) => { return WaitForObject(By.Id("submitButton")); });
//模擬光標晃動movebyoffset() Actions action = new Actions(driver); action.MoveByOffset(2, 4);
5.1:切換焦點到id爲固定值的iframe上
進入頁面後,光標默認焦點在DefaultContent中,若想要定位到iframe 須要轉換焦點
driver.SwitchTo().DefaultContent(); //切換焦點到mainFrame driver.SwitchTo().Frame("mainFrame");
須要注意的是:切換焦點以後若想切換焦點到其餘iframe上 須要先返回到defaultcontent,再切換焦點到指定的iframe上。
5.2切換焦點到id值爲動態值的iframe上
有時候 頁面上浮出層的id爲動態值,此時須要先獲取全部符合記錄的iframe放置在數組中,而後遍歷數組切換焦點到目標iframe上。
以下方法:
protected string bizFrameId = string.Empty; protected string bizId = string.Empty; //獲取動態iframe的id值 protected void SetIframeId() { ReadOnlyCollection<IWebElement> els = driver.FindElements(By.TagName("iframe")); foreach (var e in driver.FindElements(By.TagName("iframe"))) { string s1 = e.GetAttribute("id"); if (s1.IndexOf("window") >= 0 && s1.IndexOf("content") >= 0) { bizFrameId = e.GetAttribute("id"); string[] ss = s1.Split(new char[] { '_' }); bizId = ss[1]; } } }
//獲取全部的WindowHandle,關閉全部子窗口 string oldwin = driver.CurrentWindowHandle; ReadOnlyCollection<string> windows = driver.WindowHandles; foreach (var win in windows) { if (win != oldwin) { driver.SwitchTo().Window(win).Close(); } } driver.SwitchTo().Window(oldwin);
//選擇下拉框 protected void SelectUsage(string selectid, string text) { IWebElement select = Find(By.Id(selectid)); IList<IWebElement> AllOptions = select.FindElements(By.TagName("option")); foreach (IWebElement option in select.FindElements(By.TagName("option"))) { if (option.GetAttribute("value").Equals(text)) option.Click(); } }
13:Selenium中對confirm ,alert ,prompt的操做
//在本次瀏覽器兼容性測試項目中遇到的只有confirm和alert //下面舉例說明confirm和alert的代碼,prompt相似 //confirm的操做 IAlert confirm = driver.SwitchTo().Alert(); confirm.Accept(); //Alert的操做 //我的網銀中一樣的業務有時候不會彈對alert,此時須要判斷alert是否存在 //對Alert提示框做肯定操做,默認等待50毫秒 protected void AlertAccept() { AlertAccept(0.05); } //等待幾秒,能夠爲小數,單位爲秒 protected void AlertAccept(double waitseSonds) { double nsleepMillon = waitseSonds * 1000; int k=0; int split=50; IAlert alert = null; do { k++; Thread.Sleep(split); alert = driver.SwitchTo().Alert(); }
while (k * split <= nsleepMillon || alert==null); if (alert != null) { alert.Accept(); } }
//WebDriver中自帶截圖功能 Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot(); screenShotFile.SaveAsFile("test",ImageFormat.Jpeg);