自动化测试:Selenium webdriver 学习笔记-C#版(四)
生活随笔
收集整理的這篇文章主要介紹了
自动化测试:Selenium webdriver 学习笔记-C#版(四)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前面我們知道了如何進(jìn)行對(duì)象的定位,下面我們進(jìn)一步來(lái)了解selenium的一些功能特性:
?
1>等待:我們?cè)谔幚韺?duì)象的時(shí)候,對(duì)象并不能及時(shí)的“出現(xiàn)”,那么此時(shí)我們就需要進(jìn)行等待了。
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20)); //這里的20,是以"s" 為單位,這里的數(shù)值可以根據(jù)實(shí)際情況來(lái)設(shè)置,
???? 還有一種等待方式:使用WebDriverWait對(duì)象,同樣強(qiáng)大。
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>窗體轉(zhuǎn)換:
driver.SwitchTo().Window();?
4>使用Actions
var xx = driver.FindElement(By.Id("id")); Actions builder = new Actions(driver); builder.MoveToElement(xx).Perform();?
5>根據(jù)鏈接文本定位對(duì)象(不太適用本地化測(cè)試)
driver.FindElement(By.PartialLinkText("登錄"));?
6>處理彈出框
driver.SwitchTo().Alert().Accept()//簡(jiǎn)單講就是點(diǎn)擊yes driver.SwitchTo().Alert().Dismiss()//點(diǎn)擊No?
?7>判斷頁(yè)面字符串
driver.PageSource.Contains("any word;");?
?
?
下面來(lái)看具體的實(shí)例:
登陸百度首頁(yè)->搜索“博客園”->登陸博客園->退出->處理彈出框
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){//此時(shí)記得添加路徑 using (var driver = new InternetExplorerDriver(@"D:\Selenium\IEDriverServer_x64_2.34.0\")){//進(jìn)入百度首頁(yè)driver.Navigate().GoToUrl(@"http://www.baidu.com");Thread.Sleep(1000);//是否包含"百度"這個(gè)字符串,可以用來(lái)判斷頁(yè)面是否出現(xiàn)
if (driver.PageSource.Contains("百度")){ Console.WriteLine(" 123");
} //設(shè)置窗體最大化 driver.Manage().Window.Maximize();Thread.Sleep(1000);//找到對(duì)象 var colSearchBox = driver.FindElementsByName("wd");var btnClick = driver.FindElement(By.Id("su1"));//發(fā)送搜索內(nèi)容colSearchBox[1].SendKeys("bokeyuan");//Thread.Sleep(1000);//等待搜索結(jié)果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());}//搜索結(jié)果數(shù)量var searchResult_Children = searchResutl.FindElements(By.TagName("li"));foreach (IWebElement child in searchResult_Children){if (child.Text.Equals("博客園")){ //選擇正確的搜索對(duì)象 child.Click();break;}}//設(shè)置頁(yè)面加載時(shí)間driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20));//獲取當(dāng)前頁(yè)面句柄 ,適用于一個(gè)窗體//var cc = driver.CurrentWindowHandle;//進(jìn)入首頁(yè)var homePage = driver.FindElement(By.ClassName("result"));var homePage_child = homePage.FindElement(By.Id("1"));homePage_child.FindElement(By.ClassName("favurl")).Click();//設(shè)置頁(yè)面加載時(shí)間driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(20));//獲取當(dāng)前網(wǎng)頁(yè)的句柄,使用與多個(gè)窗體//那么我們需要的是第二個(gè)窗體var currentWindowHandle = driver.WindowHandles[1];//因?yàn)橐F(xiàn)在要處理的對(duì)象在新窗體上,所以這里要進(jìn)行窗體轉(zhuǎn)換 driver.SwitchTo().Window(currentWindowHandle);//下面將鼠標(biāo)移動(dòng)到左邊的".Net技術(shù)",此時(shí)會(huì)滑出相應(yīng)的模塊//用XPath定位對(duì)象,此處找到"新手區(qū)"//移動(dòng)鼠標(biāo)var xx = driver.FindElement(By.Id("cate_item_108698"));Actions builder = new Actions(driver);builder.MoveToElement(xx).Perform();Thread.Sleep(2000);//使用XPath 找對(duì)象//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]第一個(gè)div//上面的比較"笨重",下面的簡(jiǎn)單多了driver.FindElement(By.Id("cate_sub_block")).FindElement(By.XPath("//a[@href='/cate/beginner/']")).Click();//登陸//使用PartialLinkText定位對(duì)象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定位對(duì)象//點(diǎn)擊“退出”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();}}} }
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Alvin-x/p/3559951.html
總結(jié)
以上是生活随笔為你收集整理的自动化测试:Selenium webdriver 学习笔记-C#版(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HDU 1394 Minimum Inv
- 下一篇: Ajax异步请求-简单模版