首先生成一个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);