1.查看页面元素
以百度为例
找到元素后右键->copy->copy xpath
可以看到页面元素有:id=“kw” class=“s_ipt” name=“wd”
2.Id定位
find_element_by_id()
3.name定位: find_element_by_name()
4.class定位:find_element_by_class_name()
5.tag定位:find_element_by_tag_name()
如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等…。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。
6.link定位:find_element_by_link_text()
此种方法是专门用来定位文本链接的,比如百度首页右上角有“新闻”,“hao123”,“地图”等链接
7、xpath定位:find_element_by_xpath()
前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们。
但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id,name,class属性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。那么这个时候我们就只能通过xpath或者CSS来定位了
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class elementLocation {
public static void main(String[] args) throws InterruptedException {
//创建chromedrive对象
WebDriver driver = new ChromeDriver();
//打开百度首页
driver.navigate().to("https://www.baidu.com");
//1.通过id定位搜索框,输入selenium
//WebElement searchInput = driver.findElement(By.id("kw"));
//2.通过Name定位搜索框,输入selenium
//WebElement searchInput = driver.findElement(By.name("wd"));
//3.class定位:find_element_by_class_name()
//WebElement searchInput = driver.findElement(By.className("s_ipt"));
//7.xpath定位:find_element_by_xpath()
WebElement searchInput = driver.findElement(By.xpath("//*[@id='kw']"));
searchInput.sendKeys("selenium");
//递交搜索请求
searchInput.submit();
//WebElement searchBtn = driver.findElement(By.className("btn"));
//searchBtn.click();
//6.link定位:find_element_by_link_text()
//driver.findElement(By.linkText("新闻")).click();
//等待固定时间
Thread.sleep(3000);
//关闭浏览器窗口
driver.quit();
}
}
7.1 XPath定位
7.1.1 xpath是什么意思?
xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。
7.1.2 xpath定位缺点
xpath 这种定位方式, webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素, 这是个非常费时的操作, 如果脚本中大量使用xpath做元素定位的话, 脚本的执行速度可能会稍慢
7.1.2.1 绝对路径定位方式
XPath的表达式
/html/body/div/input[@value=“查询”]
绝对路径缺点
一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法
绝对路径和相对路径的区别
绝对路径 以 “/” 开头, 让xpath 从文档的根节点开始解析
相对路径 以"//" 开头, 让xpath 从文档的任何元素节点开始解析
7.1.2.2 相对路径定位方式
WebElement search = driver.findElement(By.xpath("//*[@id = 'kw']"));
WebElement search = driver.findElement(By.xpath("//*[@name = 'wd']"));
WebElement search = driver.findElement(By.xpath("//input[@class = 's_ipt']"));
WebElement search = driver.findElement(By.xpath("//span[@class = 'soutu-btn']/input"));
在这里插入代码片