自动化测试:Selenium webdriver 学习笔记-C#版(四)
生活随笔
收集整理的這篇文章主要介紹了
自动化测试:Selenium webdriver 学习笔记-C#版(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面我們知道了如何進行對象的定位,下面我們進一步來了解selenium的一些功能特性:
?
1>等待:我們在處理對象的時候,對象并不能及時的“出現”,那么此時我們就需要進行等待了。
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20)); //這里的20,是以"s" 為單位,這里的數值可以根據實際情況來設置,
???? 還有一種等待方式:使用WebDriverWait對象,同樣強大。
public IWebElement WaitForElement(IWebDriver driver, string el_id,int timeout) //找到元素就返回 {IWebElement ele = null;try{WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));ele = wait.Until<IWebElement>((d) =>{return d.FindElement(By.Id(el_id));}); }catch{Console.WriteLine("12e");}return ele;}?
2>獲取窗體句柄:
driver.CurrentWindowHandle?
3>窗體轉換:
driver.SwitchTo().Window();?
4>使用Actions
var xx = driver.FindElement(By.Id("id")); Actions builder = new Actions(driver); builder.MoveToElement(xx).Perform();?
5>根據鏈接文本定位對象(不太適用本地化測試)
driver.FindElement(By.PartialLinkText("登錄"));?
6>處理彈出框
driver.SwitchTo().Alert().Accept()//簡單講就是點擊yes driver.SwitchTo().Alert().Dismiss()//點擊No?
?7>判斷頁面字符串
driver.PageSource.Contains("any word;");?
?
?
下面來看具體的實例:
登陸百度首頁->搜索“博客園”->登陸博客園->退出->處理彈出框
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //添加selenium的引用 using OpenQA.Selenium; using OpenQA.Selenium.IE; using OpenQA.Selenium.Support.UI;using OpenQA.Selenium.Interactions; //添加引用-在程序集中添加System.Drawing using System.Drawing; using System.Drawing.Imaging;namespace Selenium {class Program{static void Main(string[] args){//此時記得添加路徑 using (var driver = new InternetExplorerDriver(@"D:\Selenium\IEDriverServer_x64_2.34.0\")){//進入百度首頁driver.Navigate().GoToUrl(@"http://www.baidu.com");Thread.Sleep(1000);//是否包含"百度"這個字符串,可以用來判斷頁面是否出現
if (driver.PageSource.Contains("百度")){ Console.WriteLine(" 123");
} //設置窗體最大化 driver.Manage().Window.Maximize();Thread.Sleep(1000);//找到對象 var colSearchBox = driver.FindElementsByName("wd");var btnClick = driver.FindElement(By.Id("su1"));//發送搜索內容colSearchBox[1].SendKeys("bokeyuan");//Thread.Sleep(1000);//等待搜索結果WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));IWebElement searchResutl = null;try{searchResutl = wait.Until<IWebElement>((d) =>{return d.FindElement(By.ClassName("bdsug"));});}catch(Exception e){Console.WriteLine("Timeout to find element:" + " "+ e.Message.ToString());}//搜索結果數量var searchResult_Children = searchResutl.FindElements(By.TagName("li"));foreach (IWebElement child in searchResult_Children){if (child.Text.Equals("博客園")){ //選擇正確的搜索對象 child.Click();break;}}//設置頁面加載時間driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20));//獲取當前頁面句柄 ,適用于一個窗體//var cc = driver.CurrentWindowHandle;//進入首頁var homePage = driver.FindElement(By.ClassName("result"));var homePage_child = homePage.FindElement(By.Id("1"));homePage_child.FindElement(By.ClassName("favurl")).Click();//設置頁面加載時間driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20));//獲取當前網頁的句柄,使用與多個窗體//那么我們需要的是第二個窗體var currentWindowHandle = driver.WindowHandles[1];//因為要現在要處理的對象在新窗體上,所以這里要進行窗體轉換 driver.SwitchTo().Window(currentWindowHandle);//下面將鼠標移動到左邊的".Net技術",此時會滑出相應的模塊//用XPath定位對象,此處找到"新手區"//移動鼠標var xx = driver.FindElement(By.Id("cate_item_108698"));Actions builder = new Actions(driver);builder.MoveToElement(xx).Perform();Thread.Sleep(2000);//使用XPath 找對象//driver.FindElement(By.Id("cate_sub_block")).FindElement(By.XPath("//div[1]/div[2]/ul[1]/li[1]/a[@href='/cate/beginner/']")).Click();//div[1]第一個div//上面的比較"笨重",下面的簡單多了driver.FindElement(By.Id("cate_sub_block")).FindElement(By.XPath("//a[@href='/cate/beginner/']")).Click();//登陸//使用PartialLinkText定位對象var btnLogin1 = driver.FindElement(By.PartialLinkText("登錄"));btnLogin1.Click();var txtUserName = driver.FindElement(By.Id("tbUserName"));txtUserName.SendKeys("Alvin-x");var txtPassword = driver.FindElement(By.Id("tbPassword"));txtPassword.SendKeys("123456");var btnLogin2 = driver.FindElement(By.Id("btnLogin"));btnLogin2.Click();Thread.Sleep(2000);//使用CssSelector定位對象//點擊“退出”var btnBackup = driver.FindElement(By.CssSelector("a[href='#']"));btnBackup.Click();//等待彈出框彈出后再處理它 Thread.Sleep(1000);IAlert result = null;while (1 < 2){try{result = driver.SwitchTo().Alert();}catch (Exception){result = null;}if (result != null){result.Accept();break;}}//退出 driver.Quit();}}} }
?
?
?
?
?
轉載于:https://www.cnblogs.com/Alvin-x/p/3559951.html
總結
以上是生活随笔為你收集整理的自动化测试:Selenium webdriver 学习笔记-C#版(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 1394 Minimum Inv
- 下一篇: Ajax异步请求-简单模版