自動化測試: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();
                
            }
        }
    }
}

 

 

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM