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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hjkl950217/article/details/54378882

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.获取页面元素和元素内容

后面的在后续的下一节中进行讲解

猜你喜欢

转载自blog.csdn.net/hjkl950217/article/details/54378882