selenium webdriver常用的网页元素定位方法

selenium webdriver进行元素定位
seleniumAPI官方API地址:https://seleniumhq.github.io/selenium/docs/api/java/index.html
提示:获取网页的指定的元素,将鼠标移至需要查看元素的位置,右击选择【检查】(Chrome浏览器),就能查看到指定位置的元素
通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素,我这里列举常见的方法:

一、By.Id()

在HTML中,id属性是唯一标识一个元素的属性。selenium中,id被作为首选的识别属性,因为这是最快的识别策略。
以百度主页为例,搜索框的HTML示例代码如下,其id为kw;
在这里插入图片描述
【百度一下】按钮的id是"su"
在这里插入图片描述
在WebDriver中通过ID查找元素的java示例代码如下:

  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.testng.annotations.Test;
  public class selenium{
      @Test
      public void test() {
          WebDriver driver = new ChromeDriver();                     //打开chrome浏览器
          driver.get("http://www.baidu.com");                        //输入网址
         driver.findElement(By.id("kw")).sendKeys("selenium");      //搜索框输入"selenium"
         driver.findElement(By.id("su")).click();                   //点击百度一下,进行搜索
         driver.quit();                                             //关闭浏览器
     }
 }

二、By.Name()

在HTML中,name属性和ID属性功能基本相同,只是name属性不一定是唯一的。在selenium中,如果没有ID的话,首先考虑的就是name属性。
沿用上图,搜索框的name是"wd"
在WebDriver中通过Name查找元素的部分java示例代码如下:

         driver.get("http://www.douban.com");                       //输入网址
         WebElement serch=driver.findElement(By.name("q"));         //生成WebElement实例对象serch
         serch.sendKeys("selenium");     //搜索框输入"selenium"
         serch.submit();                                            //进行搜索

注意:Click方法只适用于button,submit可以用于提交表单

三、By.Xpath()

XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。
这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元素。
Xpath通过路径来定位控件,分为绝对路径和相对路径。绝对路径以单/号表示,相对路径则以//表示。当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。而当/出现在xpath路径中时,则表示寻找父节点的直接子节点,当//出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点。
以下面HTML代码为例

<html>
 <body>
  <form id="login">
   <input name="name" type="text" />
   <input name="password" type="password" />
   <input name="aa" type="button" value="clear" />
  </form>
 </body>
</html>

要引用对应的对象,XPath语法如下:
(1)绝对路径写法(只有一种),写法如下:
引用页面上的form元素(即源码中的第3行):/html/body/form
(2)相对路径的引用写法:
查找页面根元素://
查找页面上所有的input元素://input
查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素)://form/input
查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form//input
查找页面上第一个form元素://form
查找页面上id为login的form元素://form[@id=‘login’]
查找页面上具有name属性为name的input元素://input[@name=‘name’]
查找页面上id为login的form元素下的第一个input元素://form[@id=‘login’]/input[1]
查找页面具有name属性为aa并且type属性为button的input元素://input[@name=‘aa’][@type=‘button’]
查找页面上id为login的form元素下第2个input元素://form[@id=‘login’]/input[2]
以百度主页为例,上图所示,搜索框的xpath为//*[@id=’'kw]。
在WebDriver中通过Xpath查找元素的java示例代码如下:

  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebElement;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.testng.annotations.Test;
  public class selenium{
      @Test
      public void test() {
          WebDriver driver = new ChromeDriver();                            //打开chrome浏览器
         driver.get("http://www.baidu.com");                              //输入网址
         WebElement serch=driver.findElement(By.xpath("//*[@id='kw'"));    //生成WebElement实例对象serch
         serch.sendKeys("selenium");   //搜索框输入"selenium"
         serch.submit();                                                 //进行搜索
         driver.quit();                                                  //关闭浏览器
     }
 }

四、By.linkText()

这个方法比较直接,即通过超文本链接上的文字信息来定位元素,这种方式一般专门用于定位页面上的超文本链接。
在这里插入图片描述
通过linkTest方式的部分java代码如下:

  WebElement a=  driver.findElement(By.linkText("新闻"));
  a.click();

猜你喜欢

转载自blog.csdn.net/Eayonz/article/details/103780065