※元素定位的重要性:在于查找元素 And 执行元素css
定位元素的三种方法html
findElement和findElements方法node
findElement()返回一个WebElement元素 web
findElements()返回一个List,多个WebElement元素chrome
八种定位方式ui
•By.id(id):经过ID 属性查找url
•By.name(name):经过name属性查找spa
•By.className(className) :经过classname属性查找插件
•By.linkText(连接文本):经过连接文本code
•By.partialLinkText(部分连接文本):经过部分连接文本
•By.cssSelector(Css路径):经过CSS路径
•By.tagName(name):经过tagname查找
•By.xpath(XPath路径):经过XPath查找
例如:id\name\classname
代码以下:
import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class ZmbxTestJC { @Test public void Testid() throws InterruptedException { WebDriver driver =new ChromeDriver(); String url = "https://www.baidu.com"; driver.get(url); driver.findElement(By.name("wd")).sendKeys("Selenium");//定位到name,输入内容 driver.findElement(By.id("su")).click();//定位到id,点击百度一下查询内容 driver.quit(); } }
例如:By.linkText(Link文本)
HTML 源码: <a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a> WebElementelement =driver.findElement(By.linkText( "搜索设置" ));
例如:By.partialLinkText(部分连接文本)
HTML 源码: <a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a> WebElementelement =driver.findElement(By. partialLinkText( "搜索" ));//搜索设置
例如:By.cssSelector(Css路径)
HTML 源码: <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a> WebElementelement=driver.findElement(By. cssSelector( "#u1 > a:nth-child(1)" ));
例如:By.tagName(name)
HTML 源码: <a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a> WebElementelement=driver.findElement(By. tagName( "a" ));
例如:By.xpath(XPath路径)
HTML 源码: <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a> WebElementelement=driver.findElement(By. xpath( "//*[@id="u1"]/a[1]" ));
注意:
1.使用findElement()方法查找元素,元素必须是惟一
2.findElements()一样支持这八种定位方式,只是获取的是多个元素,返回List
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中经过元素和属性进行导航。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。XML 文档是被做为节点树来对待的。树的根被称为文档节点或者根节点。
请看下面这个 XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price></book> </bookstore>
上面的XML文档中的节点例子:
<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)
XPath 使用路径表达式在 XML 文档中选取节点。节点是经过沿着路径或者 step 来选取的。
表达式 | 描述 |
---|---|
nodename | 选取此节点的全部子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
路径表达式 | 结果 |
---|---|
bookstore | 选取 bookstore 元素的全部子节点。 |
/bookstore | 选取根元素 bookstore。 注释:假如路径起始于正斜杠( / ), 则此路径始终表明到某元素的绝对路径! |
bookstore/book | 选取属于 bookstore 的子元素的全部 book 元素。 |
//book | 选取全部 book 子元素,而无论它们 在文档中的位置。 |
bookstore//book | 选择属于 bookstore 元素的后代的所 有 book 元素,而无论它们位于 bookstore 之下的什么位置。 |
//@lang | 选取名为 lang 的全部属性。 |
轴可定义相对于当前节点的节点集。
轴名称 | 结果 |
---|---|
ancestor | 选取当前节点的全部先辈(父、祖父等)。 |
ancestor-or-self | 选取当前节点的全部先辈(父、祖父等)以及当前节点自己。 |
attribute | 选取当前节点的全部属性。 |
child | 选取当前节点的全部子元素。 |
descendant | 选取当前节点的全部后代元素(子、孙等)。 |
descendant-or-self | 选取当前节点的全部后代元素(子、孙等)以及当前节点自己。 |
following | 选取文档中当前节点的结束标签以后的全部节点。 |
namespace | 选取当前节点的全部命名空间节点。 |
parent | 选取当前节点的父节点。 |
preceding | 选取文档中当前节点的开始标签以前的全部节点。 |
preceding-sibling | 选取当前节点以前的全部同级节点。 |
self | 选取当前节点。 |
详细了解xpath,请参照 https://www.w3school.com.cn/xpath/xpath_summary.asp