Selenium+C#自動化腳本開發學習

1:Selenium中對瀏覽器的操做

首先生成一個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();
            }
        } 
複製代碼

2:Selenium中執行JS腳本 

//須要將driver強制轉換成JS執行器類型
((IJavaScriptExecutor) driver).ExecuteScript("js文件名"); 

3:Selenium中定位頁面元素

複製代碼
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()方法的性能和效率最低下。

4:Selenium中清空文本框中的默認內容

//清空文本框clear()
Driver.FindElement(By.Id("tranAmtText")).clear(); 

5:Selenium中在指定的文本框中輸入指定的字符串

//在文本框中輸入指定的字符串sendkeys()
Driver.FindElement(By.Id("tranAmtText")).SendKeys(「123456」); 

6:Selenium中移動光標到指定的元素上

//移動光標到指定的元素上perform
Actions action=new Actions(driver);
action.MoveToElement(Find(By.XPath("//input[@id='submit' and @value='肯定']"))).Perform(); 

7:Selenium中點擊按鈕/連接

//點擊按鈕/連接click()
Driver.FindElement(By.XPath("//input[@id='submit' and @value='下一步']")).click(); 

8:Selenium中等待頁面上的元素加載完成

//等待頁面元素加載完成
//默認等待100秒
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
//等待頁面上ID屬性值爲submitButton的元素加載完成
wait.Until((d) => { return WaitForObject(By.Id("submitButton")); }); 

9:Selenium中模擬鼠標晃動

//模擬光標晃動movebyoffset()
Actions action = new Actions(driver);
action.MoveByOffset(2, 4); 

10:Selenium中對iframe中元素的定位

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];
                }
            }
        } 
複製代碼

11:Selenium中關閉多個子Browser窗口

複製代碼
//獲取全部的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); 
複製代碼

12:Selenium中對下拉框的操做

複製代碼
//選擇下拉框
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(); } } 
複製代碼

14:Selenium WebDriver的截圖功能

//WebDriver中自帶截圖功能
Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot(); 
screenShotFile.SaveAsFile("test",ImageFormat.Jpeg);
相關文章
相關標籤/搜索