zoukankan      html  css  js  c++  java
  • 元素定位Selenium快速入门(二)

    一。eclipse设置

    工欲善其事必先利其器,在说元素定位之前,先来设置下eclipse。

    首先放大一下字体,点击windows-preferences

    其次,eclipse对于java的智能提示默认是输入.才触发的,我们改为任意一个字母即可触发。

    Java-Editor-Content Assist

    在Auto activation triggers for java 输入:abcdefghijklmnopqrstuvwxyz. 注意,最后是有一点的"."

    最后,我不想工具栏中有那么多图标

    点击window-perspective-customize perspective即可设置

    最后的效果

    二。元素定位

      Selenium对于有开发经验而又懂html,css,js的人来说,其实就是小菜一碟,只要手头有api文档,即可开始写代码。但对于什么都不懂的小白,难度有些大,上面说的html,css,js起码要懂一点,如果什么都不懂,建议先学学。

      Selenium的api文档地址是:http://seleniumhq.github.io/selenium/docs/api/java/index.html 。都是英文,不过既然你要写代码,多多少少也得要啃一点英文,就算不太懂也没关系,不是很多网上即时翻译嘛。在本系列,我也将会翻译一些关键的说明。

      这里说的元素,是指Selenium里的WebElement,api文档中的介绍是:Represents an HTML element。

      意思就是说:这里的元素是指html里的元素,html里的元素简单说就是html标签,例如<p></p>

      Selenium里查找元素的方法是:findElement(By by)  和 findElements(By by) ,前者返回一个元素,后者返回一组元素

      findElement(By by)如果找到元素,会返回第一个符合要求的WebElement对象,如果找不到,则抛出”元素不存在“的异常NoSuchElementException

        findElements(By by)则不会抛出异常,如果找到一组对象,会返回java.util.List<WebElement>,如果找不到,则返回空的列表。

      而调用这两个方法都会使用到一个相同的对象,By,这个对象以下的静态方法,都是查找元素的依据。

    例如,By.id("id"),是指通过id查找元素。例如,我们查看百度首页的html,得知,搜索框的ID是kw,回到我们的eclipse,输入以下代码

    System.setProperty("webdriver.chrome.driver", "D:/WorkSpace/SeleniumTest/tools/chromedriver.exe");
             WebDriver driver=new ChromeDriver();
             driver.get("http://www.baidu.com");
             
             driver.findElement(By.id("kw")).sendKeys("Selenium");

    注意最后一句,driver.findElement(By.id("kw"))是查找id为kw的元素,后面的sendKeys("Selenium")是因为我们知道这是一个文本框,然后尝试在文本框内输入字符,以表示我们找到这个元素。如果id为"kw"的元素不存在的话,根据上面所说的,会抛出一个元素不存在的异常(NoSuchElementException)。例如,我们将id从"kw"改成"wk",执行一下,就可以看到以下结果

      所以,当你不知道该元素是否存在的时候,必须考虑到元素不存在这种情况。

      下面总结一下,查找的几种方法

    方法 说明 举例 调用
    By.id 通过id查找 <p id="msg">ttttttt</p> driver.findElement(By.id("msg"))
    By.linkText 通过链接文字查找 <a href="http://www.baidu.com">百度</a> driver.findElement(By.linkText("百度"))
    By.partialLinkText 通过部分链接文字查找 <a href="http://www.baidu.com">百度</a> driver.findElement(By.partialLinkText("百"))
    By.name 通过name查找 <p name="myname">tttttttt</p> driver.findElement(By.name("myname"))
    By.tagName 通过标签名查找 <p>tttttttt</p> driver.findElement(By.tagName("p"))
    By.xpath 通过xpath查找 <p>ttttttt</p> driver.findElement(By.xpath("/p"))
    By.cssName 通过css名查找 <p class="normal-text">ttttttt</p> driver.findElement(By.cssName("normal-text"))
    By.cssSelector 通过css选择器查找 <p id="msg">ttttttttt</p> driver.findElement(By.cssSelector("#msg"))

       如果懂得html和css,上面的说明都是非常清楚,如果不懂的,还需要自学一下。

        cssSelector的说明:http://www.w3school.com.cn/cssref/css_selectors.asp

        xpath的说明:http://www.w3school.com.cn/xpath/index.asp

        这些其实都不用死记硬背,目前的浏览器,几乎都有调试工具,可以找出任一个元素的xpath和css选择器。

          例如,chrome,按F12,即可跳出调试工具,如下图

        

      

  • 相关阅读:
    JQuery文档插件
    MVC3下使用Jquery异步提交数据!
    不错的在线客服插件~
    让火狐和chorme浏览器支持uploadify带Cookie上传
    Socket服务器代码
    Winform控件加载时闪烁的解决方案!
    MVC3 无刷新验证码
    网络时间同步
    关于多线程委托的控件操作
    c# 利用反射动态给实体类对象赋值
  • 原文地址:https://www.cnblogs.com/devtester/p/8548195.html
Copyright © 2011-2022 走看看