selenium - java版本
-
打开百度进行搜
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeDriver; public class BaiduSearch { public static void main(String[] args) { // 1.创建webdriver驱动 WebDriver driver = new EdgeDriver(); // 2.打开百度首页 driver.get("https://www.baidu.com"); // 3.获取输入框,输入selenium driver.findElement(By.id("kw")).sendKeys("selenium"); // 4.获取“百度一下”按钮,进行搜索 driver.findElement(By.id("su")).click(); // 5.退出浏览器 driver.quit(); } }
八大元素定位
定位方式
selenium提供了8种定位方式
-
id
-
name
-
class name
-
tag name
-
link text
-
partial link text
-
xpath
-
css selector
方法 | 描述 | 参数 | 示例 |
---|---|---|---|
findElement(By.id()) | 通过元素的id属性来定位元素 | 对应的id属性 | findElement(By.id("kw")) |
findElement(By.name()) | 通过元素的name属性来定位元素 | 对应的name值 | findElement(By.name(user)) |
findElement(By.className()) | 通过元素的class名来定位元素 | 对应的class类名 | findElement(By.className("password")) |
findElement(By.tagName()) | 通过元素的tag标签名来定位元素 | 对应的标签名 | findElement(By.tagName("input")) |
findElement(By.linkText()) | 通过元素-标签对之间的文本信息来定位元素 | 文本内容 | findElement(By.linkText("登录")) |
findElement(By.partialLinkText()) | 通过元素-标签对之间的部分文本信息来定位元素 | 部分文本内容 | findElement(By.partialLinkText("百度")) |
findElement(By.xpath()) | 通过xpath语法来定位元素 | xpath表达式 | findElement(By.xpath("//input[@id='kw']")) |
findElement(By.cssSelector()) | 通过css选择器来定位元素 | css元素选择器 | findElement(By.cssSelector("#kw")) |
同时这8种方法都对应有着返回复数元素的方法,分别在调用的方法findElements(By.id()) 加上一个s:
-
findElements(By.id())
-
findElements(By.name())
-
findElements(By.className())
-
findElements(By.tagName())
-
findElements(By.linkText())
-
findElements(By.partialLinkText())
-
findElements(By.xpath())
-
findElements(By.cssSelector())
-
通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
Copydriver.findElement(By.xpath("//*[@id='kw']")) // id定位 driver.findElement(By.xpath("//*[@name='wd']")) // 属性值定位 driver.findElement(By.xpath("//span[text()='按钮']")) // 文本定位 driver.findElement(By.xpath("//input[@class='s_ipt']")) // class属性定位 driver.findElement(By.xpath("/html/body/form/span/input")) // 绝对路径定位 driver.findElement(By.xpath("//span[@class='soutu-btn']/input")) // 相对路径定位 driver.findElement(By.xpath("//form[@id='form']/span/input")) driver.findElement(By.xpath("//input[@id='kw' and @name='wd']")) // 多组合属性定位 driver.findElement(By.xpath("//span[contains(text(),'按钮')]")) // 是否包含文本
-
通过css定位,css定位有N种写法,这里列几个常用写法:
Copydriver.findElement(By.cssSelector("#kw") // id定位 driver.findElement(By.cssSelector("[name=wd]") // name属性值定位 driver.findElement(By.cssSelector(".s_ipt") // class定位 driver.findElement(By.cssSelector("html > body > form > span > input") // css层级定位 driver.findElement(By.cssSelector("span.soutu-btn> input#kw") driver.findElement(By.cssSelector("form#form > span > input")
xpath进阶—轴定位
-
parent::div 上层父节点,你那叫div的亲生爸爸,最多有一个;
-
child::div 下层所有子节点,你的所有亲儿子中叫div的;
-
ancestor::div 上面所有直系节点,是你亲生爸爸或者你亲爹或者你亲爹的爸爸中叫div的;
-
descendant::div 下面所有节点,你的后代中叫div的,不包括你弟弟的后代;
-
following::div 自你以下页面中所有节点叫div的;
-
following-sibling::div 同层下节点,你所有的亲弟弟中叫div的;
-
preceding::div 同层上节点,你所有的亲哥哥以及他们的后代中叫div的;
-
preceding-sibling::div 同层上节点,你所有的亲哥哥中叫div的;
Selenium API
WebDriver常用API
WebDriver提供了一系列的API来和浏览器进行交互,如下:
方法 | 描述 |
---|---|
get(String url) | 访问目标url地址,打开网页 |
getCurrentUrl() | 获取当前页面url地址 |
getTitle() | 获取页面标题 |
getPageSource() | 获取页面源码 |
close() | 关闭浏览器当前打开的窗口 |
findElement(by) | 查找单个元素 |
findElements(by) | 查找元素列表,返回一个集合 |
getWindowHandle() | 获取当前窗口句柄 |
getWindowhandles() | 获取所有窗口的句柄 |
WebElement常用API
通过WebElement实现与网站页面上元素的交互,这些元素包含文本框、文本域、按钮、单选框、div等,WebElement提供了一系列的方法对这些元素进行操作:
方法 | 描述 |
---|---|
click() | 对元素进行点击 |
clear() | 清空内容(如文本框内容) |
sendKeys(...) | 写入内容与模拟按键操作 |
isDisplayed() | 元素是否可见(true:可见,false:不可见) |
isEnabled() | 元素是否启用 |
isSelected() | 元素是否已选择 |
getTagName() | 获取元素标签名 |
getAttribute(attributeName) | 获取元素对应的属性值 |
getText() | 获取元素文本值(元素可见状态下才能获取到) |
submit() | 表单提交 |
代码案例
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.edge.EdgeDriver; import java.sql.SQLOutput; public class Demo_API { public static void main(String[] args) { // 加载Edge浏览器驱动 WebDriver driver = new EdgeDriver(); // 打开百度首页 driver.get("https://www.baidu.com"); // 获取搜索框元素 WebElement inputElem = driver.findElement(By.id("kw")); // clear()方法,清空搜索框内容 inputElem.clear(); // sendKeys()方法,在搜索框中输入搜索内容 inputElem.sendKeys("selenium"); // 元素是否显示 boolean displayed = inputElem.isDisplayed(); System.out.println(displayed);// true // 元素收否可用 boolean enable = inputElem.isEnabled(); System.out.println(enable);// true // 判断元素是否被选中状态,一般用在Radio(单选),Checkbox(多选),Select(下拉框)元素上 // 在输入框中使用无意义 boolean selected = inputElem.isSelected(); System.out.println(selected);// false // 获取标签名 String tagName = inputElem.getTagName(); System.out.println(tagName); // input // 获取属性名(name)属性 String name = inputElem.getAttribute("name"); System.out.println(name); // wd // 获取文本值 String text = inputElem.getText(); System.out.println(text); // selenium // 通过submit()方法提交表单 driver.findElement(By.id("su")).submit(); // click()方法,点击元素 driver.findElement(By.id("su")).click(); // 关闭浏览器 driver.quit(); } }