重点:
一、八种方法查找元素
1、ID 一般是唯一的(By.id)
WebElement keyfind = driver.findElement(By.id("kw"));
2、name 使用是要确定当前打开页面是否是唯一的,如果不是,那么就会找打多个,无法进行操作。(By.name)
如何确定是否唯一?审查元素:Ctrl+F
3、链接文本
注意:只适应于a表标签
4、部分链接文本
注意:只适应于a表标签
5、通过tagname查找元素,很少用到。
6、xpath查找(By.xparh(xpath路径))
7、CSS选取
原则:有ID用ID,但是ID可能是随机数。没有ID用name,如果name有重复,那么就用xpath。
二、findElement与findElements 的区别
从字面上理解,findElement查找到一个元素,findElements查找到多个元素,并且都有返回值。
findElement 定义:WebElement findElement(By var1);
findElements定义:List<WebElement> findElements(By var1);
注意:使用findElement 当定位到多个的时候,findElement 只输出第一个。
@Test
public void findXparh02 (){
driver.get("https://www.baidu.com");
List<WebElement> list = driver.findElements(By.xpath("/html/body/div[1]/div[1]/div/div[3]/a[1]"));
// for (int i= 0; i<list.size() ; i++) {
//读取文本
String text = list.get(0).getText();
//输出文本
System.out.println(text);
}
三、常见错误
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"mine-text"}
这种错误一般是元素值错误,重新看下元素定位的值是不是正确。
一 、利用ID查找元素
package test02;
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.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class TestFindElements {
WebDriver driver;
@BeforeMethod
public void browesOpen(){
System.setProperty("Webdriver.chrome.driver","F:\工程文件\drivers\MicrosoftWebDriver.exe");
driver = new ChromeDriver();
}
@Test
public void findElements(){
driver.get("https://www.baidu.com");
WebElement keyfind = driver.findElement(By.id("kw"));
}
@AfterMethod
public void browesclose(){
driver.quit();
}
}
二、name查找元素
例2
@Test
public void findNameElements() {
driver.get("https://www.baidu.com");
WebElement keyfind = driver.findElement(By.name("wd"));
}
六、xpath获取元素
谷歌和火狐浏览器,先抓取你要的元素,然后右键copy-->copy xpath ;直接在代码中粘贴就可以了。
@Test
public void findxpath (){
driver.get("https://www.baidu.com");
WebElement keyfind = driver.findElement(By.xpath("//*[@id="su"]"));
七、通过CSS查找
谷歌浏览器,先抓取你要的元素,然后右键copy-->copy selector ;直接在代码中粘贴就可以了。
火狐浏览器,先抓取你要的元素,然后右键copy-->CSS选择器;直接在代码中粘贴就可以了。
@Test
public void findCSS (){
driver.get("https://www.baidu.com");
WebElement keyfind = driver.findElement(By.cssSelector("#su"));
}