生成一個web對象
IWebDriver driver;
driver = new FirefoxDriver();
selenium打開瀏覽器
跳轉到指定頁面
driver.Navigate().GoToUrl(baseURL + "/");
driver.title 取得當前頁的title
driver.url 取得當前頁的url
輸入框(text field or textarea)
找到輸入框元素:IWebElement element = driver.findElement(By.id("passwd-id"));
在輸入框中輸入內容:
element.sendKeys(“test”);
將輸入框清空:
element.clear();
獲取輸入框的文本內容:
element.Text;
單選項
if (CreatePassengerPage.getInsurance().Selected == false)
{
CreatePassengerPage.getInsurance().Click();
}
下拉選擇框(Select)
SelectElement selectCity=new SelectElement(driver.FindElement(By.Id("City")));
(1)通過下拉框的索引選中第二項 selectCity.SelectByIndex(2);
(2)通過下拉列表中的選項的value屬性選中 selectCity.SelectByValue("10");
(3)通過下拉列表中的選項的Text屬性選中 selectCity.SelectByText("北京");
(2)定位元素
driver.FindElement(By.Id("div1"));
driver.FindElement(By.Id("input1"));
driver.SwitchTo().DefaultContent();
(1)取得alert框信息
Html代碼:
<input id = "alert" value = "alert" type = "button" nclick = "alert('歡迎!請按確認繼續!');"/>
driver.FindElement(By.Id("alert")).Click();
IAlert alert = driver.SwitchTo().Alert();
Console.WriteLine(alert.Text);
confirm.Dismiss(); //點彈框關閉
(2)取得輸出對話框上面的文字
Html代碼:
<input id = "confirm" value = "confirm" type = "button" nclick = "confirm('確定嗎?');"/>
driver.FindElement(By.Id("confirm")).Click();
IAlert confirm = driver.SwitchTo().Alert();
Console.WriteLine(confirm.Text);
confirm.Accept(); //點擊確定
(3)點擊按鈕,輸入名字,然后點擊確認
Html代碼:
<input id = "prompt" value = "prompt" type = "button" nclick = "var name = prompt('請輸入你的名字:','請輸入
你的名字'); document.write(name) "/>
driver.FindElement(By.Id("prompt")).Click();
IAlert prompt = driver.SwitchTo().Alert();
Console.WriteLine(prompt.Text);
prompt.SendKeys("Hello");
prompt.Accept(); //點擊確定
((IJavaScriptExecutor) driver).ExecuteScript("js")
<input id="FHX_txtFromDate" type="text" readonly="readonly" name="FromTime" autocomplete="off" placeholder="yyyy-mm-dd" style="background-image: url("http://pic.c-ctrip.com/cquery/pic_aftertomorrow.png"); background-position: right center; background-repeat: no-repeat;"/>
/// <summary>
/// 設置元素只讀屬性為否
/// </summary>
/// <param name="type">ById、ByName、ByTagName</param>
/// <param name="value">value</param>
public void setReadOnlyFalseByAttribute(string type, string value)
{
string js = "";
switch (type)
{
case "ById":
js = "document.getElementById('" + value + "').readOnly=false;";
break;
case "ByName":
js = "document.getElementsByName('" + value + "').item(O).readOnly=false;";
break;
case "ByTagName":
js = "document.getElementsByTagName('" + value + "').item(O).readOnly=false;";
break;
}
((IJavaScriptExecutor)driver).ExecuteScript(js);
}
INavigation navigation = driver.Navigate();
navigation.GoToUrl(http://www.baidu.com);
navigation.GoToUrl("http://tieba.baidu.com/f/search/adv");
IWebElement select = driver.FindElement(By.Name("sm"));
string targetText = "按相關性排序";
System.Collections.Generic.IList<IWebElement> ptions = select.FindElements(By.TagName("option"));
for (int i = 0; i < options.Count; i++)
{
if (options[i].Text == targetText)
{
options[i].Click();
}
}
Navigation navigation = driver.navigate();
navigation.to(http://www.baidu.com);
navigation.to("http://tieba.baidu.com/f/search/adv");
WebElement select = driver.findElement(By.name("sm"));
String targetText = "按相關性排序";
java.util.List<WebElement> ptions = select.findElements(By.tagName("option"));
for (int i = 0; i < options.size(); i++)
{
if (options.get(i).getText().equals(targetText))
{
options.get(i).click();
}
}
//操作鍵盤TAB鍵
Actions enter = new Actions(driver);
enter.SendKeys(Keys.Tab).Perform();
如何等待頁面元素加載完成
(1)明確等待
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromMinutes(5));
(2)隱形等待
(1)當前窗口的句柄
driver.CurrentWindowHandle
driver.WindowHandles
(3)根據句柄得到窗口
if driver.CurrentWindowHandle=driver.WindowHandles[i]
IWebDriver window=driver.SwitchTo().Window(driver.WindowHandles[i])
(4)根據窗口得到title,url
window.Title
window.Url
如何操作cookie
(1)增加一個name = "name",value="value"的cookie
Cookie cookie=new Cookie("name","value");
driver.Manage().Cookies.AddCookie(cookie);
(2)得到頁面下所有的cookies,輸入它的所在域、name、value、有效日期、路徑
ICookieJar cookies=driver.Manage().Cookies;
Cookie co = cookies.GetCookieNamed("name");
Console.WriteLine(co.Domain);
Console.WriteLine(co.Name);
Console.WriteLine(co.Value);
Console.WriteLine(co.Expiry);
Console.WriteLine(co.Path);
a)通過cookie的name
driver.Manage().Cookies.DeleteCookieNamed("CookieName");
b)通過cookie對象
driver.Manage().Cookies.DeleteCookie(cookie);
c)全部刪除
driver.Manage().Cookies.DeleteAllCookies();
如何利用Selenium-webdriver截圖
Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot();
screenShotFile.SaveAsFile("test",ImageFormat.Jpeg);
如何取得table中的內容
(1)通過行得到列的方法
private IWebElement GetCell(IWebElement row,int cell)
{
IList<IWebElement> cells;
IWebElement target = null;
//列里面有"<th>"、"<td>"兩種標簽,所以分開處理
if(row.FindElements(By.TagName("th")).Count>0)
{
cells = row.FindElements(By.TagName("th"));
target = cells[cell];
}
if(row.FindElements(By.TagName("td")).Count>0)
{
cells = row.FindElements(By.TagName("td"));
target = cells[cell];
}
return target;
}
(2)通過By得到行的方法
public String GetCellText(By by,String tableCellAddress)
{
//得到table元素
IWebElement table = driver.FindElement(by);
//對所要查找的單元格位置字符進行分解,得到對應的行、列
int index = tableCellAddress.Trim().IndexOf('.');
int row = Convert.ToInt32(tableCellAddress.Substring(0, index));
int cell = Convert.ToInt32(tableCellAddress.Substring(index + 1));
//得到table表中所有行對象,並得到所要查詢的行對象
IList<IWebElement> rows = table.FindElements(By.TagName("tr"));
IWebElement theRow = rows[row];
return GetCell(theRow, cell).Text;
}
(3)通過參數得到對應行列的內容
Console.WriteLine(GetCellText(By.Id("mytable"),"0.2")); //得到id="mytable"中的第一行第三列的表格內容
多選項(checkbox)
多選項的操作和單選的差不多:
WebElement checkbox = driver.findElement(By.id("myCheckbox."));
checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();
