SeleniumWithC#基础教程
Selenium API
Selenium API中的Actions类(==注意不要跟.NET⾃带的委托Action混淆==)提供了⼀些⽅法⽤于⽤户与浏览器进⾏较为复杂的交互操作,可以让⽤户通过键盘和⿏标等进⾏⼀系列的操作。详细的⽅法,我们可以通过查看Actions类,如下图所⽰:
11-1 Selenium API.jpg
使⽤⽅法
第⼀步:需要引⽤OpenQA.Selenium.Interactions
using OpenQA.Selenium.Interactions;
第⼆步:调⽤⽅法
new Actions(driver).+"需要调⽤的⽅法"+.Perform();
⿏标单击控件
这个在之前的⽂章已经多次使⽤过了,⽰例代码如下:
IWebDriver driver=new ChromeDriver();
driver.Url = "www.baidu";
IWebElement eles = driver.FindElement(By.LinkText("关于百度"));
Actions actionsObj = new Actions(driver);
actionsObj.Click(eles).Perform();
上⾯是通过Actions类来实现⿏标单击,其实也可以直接使⽤IWebElement中⾃带的Click⽅法
⿏标双击控件
IWebDriver driver=new ChromeDriver();
IWebElement eles=driver.FindElement(By.Id("id"));
Actions actionsObj = new Actions(driver);
actionsObj.DoubleClick(eles).Perform();
⿏标单击拖动
下⾯的代码演⽰的是从第1个控件单击并拖动⾄第5个控件,并选中这5个控件,如下所⽰:
driver.Url = "/demo/5640.html";
Thread.Sleep(1000);
driver.Manage().Window.Maximize();
ReadOnlyCollection<IWebElement> items = driver.FindElements(By.XPath("//ol[@id='selectable']/li"));
Assert.AreEqual<int>(7, items.Count);
Actions actionsObj = new Actions(driver);
actionsObj.ClickAndHold(items[0]).ClickAndHold(items[4]).Release().Perform();
最后⼀⾏代码连续调⽤了两次ClickAndHold()⽅法,==第1次调⽤代表是起始控件,第2次调⽤代表是结束控件,注意⾥⾯的下标是从0开始==
⿏标单击拖动前后的状态
11-2 ⿏标单击拖动前后的状态_c2i.jpg
移动⿏标到指定控件
IWebElement eles=driver.FindElement(By.Id("id"));
Actions actionsObj = new Actions(driver);
actionsObj.MoveToElement(eles).Perform();
⿏标拖放
拖放操作因操作简单易懂,在Web页⾯中应⽤也越来越⼴,特别是⼀些银⾏页⾯中。以下代码演⽰如何通过Selenium API来完成操作。
⽅法⼀:通过⽅法DragAndDrop()实现
driver.Url = "/demo/5622.html";
Thread.Sleep(1000);
driver.Manage().Window.Maximize();
IWebElement soureEle = driver.FindElement(By.Id("draggable"));
IWebElement targetEle = driver.FindElement(By.Id("droppable"));
Actions actionObj = new Actions(driver);
actionObj.DragAndDrop(soureEle, targetEle).Perform();
IWebElement textEle = driver.FindElement(By.XPath("//div[@id='droppable']/p"));
Assert.IsTrue(textEle.Text.Contains("Dropped!"));
⽅法⼆:通过⽅法MoveToElement实现
driver.Url = "/demo/5622.html";
Thread.Sleep(1000);
driver.Manage().Window.Maximize();
IWebElement soureEle = driver.FindElement(By.Id("draggable"));
IWebElement targetEle = driver.FindElement(By.Id("droppable"));
Actions actionObj = new Actions(driver);
actionObj.ClickAndHold(soureEle).MoveToElement(targetEle).Release(targetEle).Perform();
IWebElement textEle = driver.FindElement(By.XPath("//div[@id='droppable']/p"));
Assert.IsTrue(textEle.Text.Contains("Dropped!"));
selenium怎么使用⿏标拖放前后的状态
11-3 ⿏标拖放前后状态_c2i.jpg
拖动进度条或滑块
进度条或滑块⼀般都是通过JavaScript或JQuery实现,⽅便⽤户直观的调整值。⼀种使⽤JavaScript实现的滑块如下所⽰:
11-4 滑块⽰例_c2i.jpg
⽰例代码如下:
driver.Url = "demo.lanrenzhijia/2015/drag1218/";
Thread.Sleep(1000);
driver.Manage().Window.Maximize();
IWebElement origianlValueEle = driver.FindElement(By.Id("title"));
Assert.AreEqual("0", origianlValueEle.Text);
IWebElement sliderEle = driver.FindElement(By.Id("btn"));
Actions actionsObj = new Actions(driver);
actionsObj.DragAndDropToOffset(sliderEle, 100, 0).Perform();
Assert.AreEqual("51%", origianlValueEle.Text);
滑块移动前后的状态
11-5 移动滑块代码实现_c2i.jpg
单击⿏标右键菜单
在部分⽹站中会有⼀些操作需要通过右键菜单来实现,对于这种情况Selenium API也提供⼀种⽅法ContextClick()⽅法,详细演⽰如下所⽰:
driver.Url = "www.helloweba/demo/2017/basicContext/";
Thread.Sleep(1000);
driver.Manage().Window.Maximize();
IWebElement btnEle = driver.FindElement(By.XPath("//button[contains(@class,'btn-success context')]"));
Actions actionsObj = new Actions(driver);
//点击右键菜单
actionsObj.ContextClick(btnEle).Perform();
IWebElement rightMenu = driver.FindElement(By.XPath("//div[@class='basicContext']/table/tbody/tr[2]"));
rightMenu.Click();
IAlert alert = driver.SwitchTo().Alert();
string alertText = alert.Text;
alert.Accept();
Assert.AreEqual<string>("Item clicked!",alertText);
键盘操作
在之前的⽂章中我们经常使⽤SendKeys()⽅法向页⾯中输⼊⽂本,下⾯我们将演⽰,在百度搜索中输⼊⼀段⽂字,然后通过键盘全选,再删除的案例,代码如下:
driver.Url = "www.baidu/";
Thread.Sleep(1000);
driver.Manage().Window.Maximize();
IWebElement searchBoxEle = driver.FindElement(By.Id("kw"));
searchBoxEle.SendKeys("在百度搜索框中输⼊⼀段⽂字");
Thread.Sleep(1000);
Actions actionObj = new Actions(driver);
//使⽤Ctrl+A全选输⼊的⽂字
actionObj.Click(searchBoxEle).KeyDown(Keys.Control).SendKeys("a").KeyUp(Keys.Control).Perform();
//使⽤键盘Backspace删除刚才输⼊的⽂字
actionObj.SendKeys(Keys.Backspace).Perform();
注意上⾯代码最后⼀⾏使⽤了Actions类中的SendKeys()⽅法,该⽅法与IWebElement接⼝中的SendKeys()⽅法不⼀样,注意区别,如下所⽰:
11-6 SendKeys⽅法的区别.jpg

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。