隐藏

Selenium+C#自动化脚本开发学习

发布:2020/9/25 11:44:32作者:管理员 来源:本站 浏览次数:983

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