zoukankan      html  css  js  c++  java
  • Selenium webdriver Java 查找元素

    1.简单查找

    By ID: WebElement element=driver.findElement(By.id("userId"));

    By Name:WebElement element=driver.findElement(By.name("cheese"));

    By TagName:WebElement element=driver.findElement(By.tagName("a"));

    By ClassName:WebElement element=driver.findElement(By.className("login"));

    By LinkText:WebElement element=driver.findElement(By.linkText("Blog");

    这种方式很简单,只需要知道id等等属性值就好。那么问题来了,怎么知道属性值是什么呢?总不至于通过网页源码一个一个查看吧!其实Firefox 有一款很强大的插件,叫 Firebug。它是一款很经典的定位网页元素以及查看网页源码的插件。安装方法是在火狐的附加组件里搜索”Firebug",然后我这边选择的是 “Firebug 2.0.8",安装即可。

    2.Xpath

    关于Xpath的教程可以参考w3School:http://www.w3school.com.cn/xpath/

    为了方便定位以及确认Xpath是否正确,Firefox也有一款插件叫Xpath finder。选择附加组件,然后搜索 Xpath即可看到,我这边的版本是 Xpath finder 1.02,点击安装即可。

    Xpath使用路径表达式来选取XML文档中的节点或者节点集。

    选取节点

    下面列出了最有用的路径表达式:

    表达式描述
    nodename 选取此节点的所有子节点。
    / 从根节点选取。
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    . 选取当前节点。
    .. 选取当前节点的父节点。
    @ 选取属性。

    谓语

    谓语用来查找某个特定的节点或者包含某个指定的值得节点。谓语被嵌在[]中。

    在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

    路径表达式结果
    /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
    /bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
    /bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
    /bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
    //title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
    //title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
    /bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
    /bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

    使用:WebElement element=driver.findElement(By.xpath("//ul[@class='nav logged_out']/li"));

    表示首先查找class属性的值为 ”nav logged_out"的ul元素,然后查找到这些ul元素下面的所有li元素。

    3.CSS选择器

    其实大部分的元素都会有一个ID或者Name,这样通过方法1就可以解决,比较奇葩复杂的也全部可以通过XPath来解决。那么为啥还要用CSS呢?恩,据说是因为CSS是最快的。这个需要点CSS功底。想当初W3C的教程我可是看了好久。

    CSS教程:http://www.w3school.com.cn/css/index.asp

    使用:List<WebElement> webElements = webdriver.findElements(By.cssSelector("ul.nav li"));

    .nav 代表 class="nav"。

    #nav 代表 id="nav"。

    ul 代表属性为 “ul"。

    上面那句话的意思是选择所有class属性值为”nav"的ul下面的li。话说,有点绕啊~~

  • 相关阅读:
    php1
    element ui
    webpack
    vue-router
    vue实例相关2
    vue实例相关
    js笔记2
    js笔记
    不找工作,你的简历也要更新!
    除了做测试,我们还能做些什么呢?
  • 原文地址:https://www.cnblogs.com/miniren/p/4638926.html
Copyright © 2011-2022 走看看