元素定位原则:定位表达式定位到对应的唯一元素

一、基础元素定位

By.id:根据元素的id属性来定位

By.name:根据元素的name属性来定位

By.tagName:根据元素的标签名来定位,基本不使用

By.className:根据元素的class属性来定位

By.linkText:根据超链接的完整文本值来定位元素

By.partialLinkText:根据超链接的部分文本值来定位

例子:

WebDriver driver = openBrowser("chrome");
driver.get("https://www.baidu.com");
//1.id定位
WebElement id = driver.findElement(By.id("kw"));
id.sendKeys("UI自动化");

//2.name定位
driver.findElement(By.name("wd")).sendKeys("UI自动化");

//3.tagName定位(基本不使用)
List<WebElement> list = driver.findElements(By.tagName("input"));
System.out.println(list.size());

//4.className定位:不支持带空格的复合类名,可以选取其中之一且为唯一的元素值
driver.findElement(By.className("s_ipt")).sendKeys("UI自动化");

//5.linkText定位
driver.findElement(By.linkText("百度首页")).click();

//6.partialLinkText定位
driver.findElement(By.partialLinkText("闻")).click();

二、cssSelector元素定位

根据tagName:By.cssSelector("标签名");

根据id:By.cssSelector("#id");

根据className(样式名):By.cssSelector("标签名.className");

根据元素属性:By.cssSelector("标签名[属性名='属性值']");

单属性:By.cssSelector("标签名[属性名='属性值']");

多属性:By.cssSelector("标签名[属性名1='属性值'][属性名2='属性值']")

例子:

WebDriver driver = openBrowser("chrome");
driver.get("https://www.baidu.com");
//1.tagName
List<WebElement> list = driver.findElements(By.cssSelector("input"));
System.out.println(list.size());

//2.id
driver.findElement(By.cssSelector("#kw")).sendKeys("UI自动化");

//3.className
driver.findElement(By.cssSelector(".bg .s_btn")).click();

//4.根据元素属性
driver.findElement(By.cssSelector("a[href='http://news.baidu.com']")).click();

三、xpath元素定位
xpath其实就是一个path(路径),一个描述页面元素位置的路径,相当于元素的坐标;基于XML文档树状结构,是XML路径语言,用来查询xml文档中的节点;既可以用于XML也可以用于HTML

1.绝对定位

从根开始找(根目录),例如百度首页的“新闻”文本定位,/html/body/div[1]/div[2]/div[2]/a[1]

2.相对定位

只要不是/开始的,就是相对路径,例如百度首页的“新闻”文本定位,//*[text()='新闻']

路径解释:

        //:匹配指定节点,不考虑它们位置(/则表示绝对路径,从根下开始)

        *:通配符,匹配任意元素标签名

        @:选取属性

        []:属性判断条件表达式

定位方式:

        通过元素名定位://input,获取页面所有input元素

        通过元素名+索引定位://input[1],获取页面input标签的第一个位置

        使用元素名+属性://input[@name='wd'],获取页面input标签属性name值为wd的元素

        使用元素(html元素–>标签)名+包含部分属性值://input[contains(@class,'bg')],获取页面input标签class包含“bg”属性的元素

        使用元素名+元素的文本内容://a[text()='新闻'],获取页面a标签文本内容等于“新闻”文本内容的元素

        使用元素名+包含元素的部分文本内容://a[contains(text(),'新闻')],获取页面a标签带有“新闻”文本内容的元素

3.轴定位

当某个元素的各个属性及其组合都不足以定位时,可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位

轴名称 解释
ancestor 选取当前节点的所有祖先节点(包括父节点),找所有的祖先
parent 选取当前节点之前的所有节点
preceding-sibling 选取当前节点之前的所有兄弟节点
following 选取当前节点之后的所有节点
following-sibling 选取当前节点之后的所有兄弟节点

使用语法:/轴名称::节点名称[@属性=值],例如://div/table//td//preceding::td

四、chrome浏览器定位调试

1.js调试方式

console里面执行javascript代码,操作dom对象。每个载入浏览器的 HTML 文档都会成为 Document 对象。Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

通过id获取:document.getElementById(“id”)

通过name获取:document.getElementsByName(“Name”) 返回的是list

通过标签名选取元素:document.getElementsByTagName(“tag”)

通过CLASS类选取元素:document.getElementsByClassName(“class”)

通过CSS选择器选取元素:document.querySelectorAll(“css selector")

image.png

2.xpath或css调试
xpath:使用$x("")

image.png

css调试:使用$("") 或$$("")

image.png

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注