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


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

1:Selenium中對瀏覽器的操作

首先生成一個Web對象

IWebDriver driver = new FirefoxDriver();

 

//打開指定的URL地址

driver.Navigate().GoToUrl(@"http://12.99.102.196:9080/corporbank/logon_pro.html");

 

//關閉瀏覽器

Driver.quit();

 

 

網銀瀏覽器兼容性測試過程中,關閉瀏覽器后會有對話框,此問題解決方法如下:

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定位並操作

string order = "#resultTable.result_table tbody tr.bg1 td.center a";

driver.FindElement (By.CssSelector(order)).click();

 

3.6使用Xpath定位並元素並操作

//使用多個屬性定位元素

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();

 

各方法使用優先原則:

優先使用id,name,classname,link;次之使用CssSelector();最后使用Xpath();

因為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);

 

本文轉載自http://www.51testing.com/html/66/15050766-865363.html


免責聲明!

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



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