import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import java.util.concurrent.TimeUnit;
public class FindByCss {
public static void main(String[] args) {
//指定chrome驱动
System.setProperty("webdriver.chrome.driver", "C:\\drivers\\chromedriver.exe");
//测试八种方法,测试时请指定方法
//一、CSS属性定位
//CssById();
//CssByClass();
//CssByTag();
//二、CSS通过其他属性定位
//CssByName();
//CssByAutocomplete();
//CssByType();
//三、CSS:通过标签与属性的组合来定位元素
//CssByTagAndId();
//CssByTagAndClass();
//CssByTagAndAutocomplete();
//四、CSS:层级关系定位
//CssByLevelId();
//CssByLevelClass();
//五、CSS:索引
CssByIndex();
//二、XPath标签的定位方法
//XpathByTagId();
//XpathByTagName();
//XpathByTagClass();
//XpathByTagOther();
//三、XPath层级的定位方法
//XpathByLevel();
//四、XPath索引的定位方法
//XpathByIndex();
//五、逻辑运算
//XpathByLogic();
//六、模糊匹配
//XpathByLikeName();
//XpathByLikeText();
//XpathByAsBegin();
//XpathByAsEndsWith();
//pathByAsEndMatch();
}
/**
* 一、CSS:属性定位
*/
/**
* 1. CSS通过id属性定位,需要加上标识符“#”,如:#kw;
*/
public static void CssById() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过id定位百度搜索输入框,并输入“CSS通过id属性定位”
WebElement element = driver.findElement(By.cssSelector("#kw"));
element.sendKeys("CSS通过id属性定位");
}
/**
* 2. CSS通过class属性定位,需要加上标识符 “.”,如:.s_ipt;
*/
public static void CssByClass() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过CLASS定位百度搜索输入框,并输入“CSS通过class属性定位”
WebElement element = driver.findElement(By.cssSelector(".s_ipt"));
element.sendKeys("CSS通过class属性定位");
}
/**
* 3. CSS通过标签属性定位,不需要任何标示符,如:input;
*/
public static void CssByTag() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//这里运行会报错,因为标签“input”不是唯一的;这里主要是了解写法
WebElement element = driver.findElement(By.cssSelector("input"));
element.sendKeys("CSS通过标签定位");
}
/**
* 二、CSS:通过其它属性定位
*/
/**
* 1. CSS通过其它属性定位:name
*/
public static void CssByName() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过其它属性:NAME定位百度搜索输入框,并输入“CSS通过其他属性:name定位”
WebElement element = driver.findElement(By.cssSelector("input[name=wd]"));
element.sendKeys("CSS通过其他属性:name定位");
}
/**
* 2. CSS:通过autocomplete属性定位元素;
*/
public static void CssByAutocomplete() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过autocomplete定位百度搜索输入框,并输入“css通过autocomplete定位”
WebElement element = driver.findElement(By.cssSelector("[autocomplete = 'off']"));
element.sendKeys("css通过autocomplete定位");
}
/**
* 3. CSS通过type属性定位元素
*/
public static void CssByType() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
WebElement element1 = driver.findElement(By.cssSelector("[autocomplete = 'off']"));
element1.sendKeys("css通过autocomplete定位");
//CSS通过type属性定位百度一下并点击”
WebElement element2 = driver.findElement(By.cssSelector("[type = 'submit']"));
element2.click();
}
/**
* 三、CSS:通过标签与属性的组合来定位元素
*/
/**
* 1. CSS通过标签与id属性组合定位元素
*/
public static void CssByTagAndId() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过标签与id属性定位百度搜索输入框,并输入“CSS通过标签与id属性定位”
WebElement element = driver.findElement(By.cssSelector("input#kw"));
element.sendKeys("CSS通过标签与id属性定位");
}
/**
* 2. CSS通过标签与class属性定位元素
*/
public static void CssByTagAndClass() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过标签与class属性定位百度搜索输入框,并输入“CSS通过标签与class属性定位”
WebElement element = driver.findElement(By.cssSelector("input.s_ipt"));
element.sendKeys("CSS通过标签与class属性定位");
}
/**
* 3. CSS通过标签与其它属性组合定位元素;
*/
public static void CssByTagAndAutocomplete() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过标签与autocomplete属性定位百度搜索输入框,并输入“CSS通过标签与autocomplete属性定位”
WebElement element = driver.findElement(By.cssSelector("input[autocomplete = 'off']"));
element.sendKeys("CSS通过标签与autocomplete属性定位");
}
/**
* 四、CSS:层级关系定位
*/
/**
* 1. form的id属性
*/
public static void CssByLevelId() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过层级定位百度搜索输入框,并输入“css通过定位它爷爷来定位input输入框”
WebElement element = driver.findElement(By.cssSelector("form#form>span>input"));
element.sendKeys("css通过By.cssSelector(\"form#form>span>input\")定位input输入框");
}
/**
* 2. form的class属性
*/
public static void CssByLevelClass() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
//CSS通过层级定位百度搜索输入框,并输入“css通过定位它爷爷来定位input输入框”
WebElement element = driver.findElement(By.cssSelector("form.fm>span>input"));
element.sendKeys("css通过By.cssSelector(\"form.fm>span>input\")定位input输入框");
}
/**
* 五、CSS:索引
*/
/**
* 1.如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。
*
* 2.虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到。
*
* 3. selenium的索引是从1开始的
*
* 4. css也可以通过索引option:nth-child(1)来定位子元素,这点与xpath写法用很大差异;其实很好理解,直接翻译过来就是第几个小孩;
*/
public static void CssByIndex() {
WebDriver driver = new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//定位id是s-top-left的div下多个同等级的a标签,选择第1……n个
WebElement option1 = driver.findElement(By.cssSelector("div#s-top-left>a:nth-child(1)"));
option1.click();
WebElement option2 = driver.findElement(By.cssSelector("div#s-top-left>a:nth-child(2)"));
option2.click();
WebElement option3 = driver.findElement(By.cssSelector("div#s-top-left>a:nth-child(3)"));
option3.click();
WebElement option4 = driver.findElement(By.cssSelector("div#s-top-left>a:nth-child(4)"));
option4.click();
WebElement option5 = driver.findElement(By.cssSelector("div#s-top-left>a:nth-child(5)"));
option5.click();
WebElement option6 = driver.findElement(By.cssSelector("div#s-top-left>a:nth-child(6)"));
option6.click();
}
}