您的位置:首页 > 编程语言 > C#

C# Selenium学习(二)-查找(定位)元素

2017-01-12 16:02 239 查看

C# Selenium学习(二)

前面都是一些准备工作,现在就开始学习像Selenium IDE上的操作怎么在代码中实现了。这节主要写定位操作。
思想是:先生成一个特定浏览器的测试器,然后用对象的方式一层一层的进行操作。如定位,要先生成一个By对象,然后用FindElement()方法+刚才生成的参数,返回一个web元素对象IWebElement。有返回值后,代表我们已经定位过去了,再进行Click等操作。
若文章中有错误和不足之处,希望能在评论区中指出来


1.打开网页

要用对应的浏览器来生成一个测试器对象,我用的是chrome浏览器。然后再用导航器导航过去就行。


生成测试器对象和打开网页如下:

IWebDriver selenium =  new ChromeDriver( );
selenium.Navigate( ).GoToUrl( "http://www.baidu.com" );


Navigate方法返回一个导航对象,所以才会有GoToUrl方法。


2.查找(定位对象)

在基础的Selenium IDE上进行操作时,第一个要学会的就是定位对象。这里定位的方式和IDE上面是一样的。只是方式变了一下。是通过FindElement()这个方法来查找的。然后把参数传递过去。如下图




其中By.id("su")就是定位参数,和IDE上的用法是一样的。只是这里不是写表达式,是传递一个对象过去。


有8种定位方式。传递方式如下图:



注意:1.其中PartialLinkText是模糊查找。比如百度网页中的关于 参数写“关”就可以了,不用写*这种符号。
2.TagName是按标记查找,就是HTML标记。比如百度中 第一个A标记的元素,就可以用这个方法去定位。不过还是觉得用ID和name定位比较好

到这里,已经能定位元素了。定位后再进行其它操作就行。在进行 FindElement( By.Id("su") )后返回的是一个web元素对象,代表我们定位到的元素。所以后面才会有Click。如果一次操作后还要进行操作,要重新进行定位,就像在IDE上,一条命令只能进行一个操作一样。


3.操作元素对象WebElement

这个对象由用FindElement()方法得到。表示定位到的元素。
在这里主要是进行Click和SendKeys操作,如图。其它的自己查看定义就知道了。




1.SenKeys就是在定位到输入框后,把参数text赋值进去
2.Click就是进行鼠标点击操作,比如点击按钮等。和IDE上一样的。单选、复选都是通过这个方法这点击的。同时因为没有Select方法,只能用过遍历的方式来选择下拉列表。如下:




IWebDriver selenium = new ChromeDriver( );

//打开网页
selenium.Navigate( ).GoToUrl( "http://tieba.baidu.com/f/search/adv" );
//获取选择项集合
List<IWebElement> listOption = selenium.FindElement( By.Name( "sm" ) ).FindElements( By.TagName( "option" ) );


写到这里,发现下面报错:




阅读一下错误提示,不能发现。无法将一个只读集合隐式转换为集合。改用IList就可以了。查阅了资料,发现是ReadOnlyCollection继承于IList,所以只用来查看的话,可以用IList的

继续完成代码:


IWebDriver selenium = new ChromeDriver( );

selenium.Navigate( ).GoToUrl( "http://tieba.baidu.com/f/search/adv" );
IList<IWebElement> listOption = selenium.FindElement( By.Name( "sm" ) ).FindElements(       By.TagName( "option" ) );
string targetStr = "按相关性排序";

foreach( var item in listOption )
{
if( item.Text == targetStr ) item.Click( );
}


这样就完成了选中的操作了。这里用到了FindElements()方法。当返回值不是一个时,就用这个方法获取集合。然后只读集合太长了,而这里也只是简单的查阅数据,所以用IList<T>对象代替。


3.2Clear和Submit方法

这两个方法本身不难,只是要稍微注意一点:

1.Clear方法是用于清空输入框的值,和SendKeys正好的作用正好相反。自己测试时,建议先给输入框赋值,再用Thread.Sleep(3000)来暂停一下,再用Clear方法,不然你还没看到效果时,程序已经完成了。
2.Submit的特殊之处在于,当定位的是Form表单中任何一个元素,当操作完之后,直接调用那个Submit方法就能对整个Form表单完成提交。不用再返回重新查找表单元素。


4.获取页面元素和元素内容

后面的在后续的下一节中进行讲解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: