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();
//點選按鈕/連結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中對下拉框的操作
//選擇下拉框
protectedvoid 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);