生成一个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();