识别并加载元素
driver.findElements() & driver.findElement()
返回list与元素
List<WebElement> elements = driver.findElements(By.name("name"));
System.out.println("Number of elements:" +elements.size());
输入值 sendKeys()
按钮 click() 或者 submit()
都可以用来点击, 但是submit的区别是: webdriver会去检测元素所属的form; click()会去加载整个页面
点击区分
Check Box, Radio Button click() used to toggle the element on/off
链接,使用click()
使用精确匹配时; 如果通过By.TestLink(); 如果出现两个不同的element有相同的TestLnik; 那只匹配到第一个。
By.linkText() –精确匹配对应的词
By.partialLinkText() –模糊匹配包含就可以
当使用模糊匹配时, 对点击匹配到的第一个;他们大小写敏感。
鼠标点击操作
鼠标操作
step1:导入jar包: Action Actions
step2: 创建一个Actions实例;Actions builder = new Actions(Driver);
step3: 创建一个Action实例, 基于上一步创建的Actions;
Action mouseOverHome = builder.moveToElement(link).build();
step4: mouseOverHome.perform();
1. clickAndHold() 点击但是不松
2. contextClick() 右击
3. doubleClick()
4. dragAndDrop(source, target) 拖
5. dragAndDropBy(source, x-offset, y-offset) 拖动
6. keyDown(modifier_key)
7. KeyUp()
使用Action 类
Action act = new Action(driver);
Action mouse = act.move
public static void main(String[] args) {
String baseUrl = "http://www.facebook.com/";
WebDriver driver = new FirefoxDriver();
driver.get(baseUrl);
WebElement txtUsername = driver.findElement(By.id("email"));
Actions builder = new Actions(driver);
Action seriesOfActions = builder
.moveToElement(txtUsername)
.click()
.keyDown(txtUsername, Keys.SHIFT)
.sendKeys(txtUsername, "hello")
.keyUp(txtUsername, Keys.SHIFT)
.doubleClick(txtUsername)
.contextClick()
.build();
seriesOfActions.perform() ;
}
下载以及上传
上传直接使用 SendKey()
WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));
// enter the file path onto the file-selection input field
uploadElement.sendKeys("C:\\newhtml.html");
// check the "I accept the terms of service" check box
driver.findElement(By.id("terms")).click();
下载时注意: webdriver没有可用的容量去下载, 所以使用 Wget一个自动下载的命令程序
下载软件并在cmd中试运行, 注意保存下载路径,
System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
String baseUrl = "http://demo.guru99.com/test/yahoo.html";
WebDriver driver = new FirefoxDriver();
driver.get(baseUrl);
WebElement downloadButton = driver.findElement(By
.id("messenger-download"));
String sourceLocation = downloadButton.getAttribute("href");
String wget_command = "cmd /c C:\\Wget\\wget.exe -P D: --no-check-certificate " + sourceLocation;
try {
Process exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println("Exit value: " + exitVal);
} catch (InterruptedException | IOException ex) {
System.out.println(ex.toString());
}
driver.close();
使用xpath--这个要自己试试
链接
专门讲解table的处理:链接
在HTML中 table的一个识别:
table
thread / tbody 两种二级标签
他们的三级标签都是tr 代表行
thread 下级tr中对应的列级标签是th
tbody对应的列级标签是td(格) ; 注意tr表示行
注意使用chil and self来得到其具体的text
最好不要使用tr[1]容易出现数组越界
使用webelement list来得到所有的tr或td
另外对于动态加载的表,其实需要使用更复杂的代码, 列入需要scroll down来拉去, 然后页面加载等, 这个需要对开发进行核实:到底下拉一次 可能会加载多少行等
public static void TestTable2() {
String driverLocationString = "D:\\codding\\seleniumTest\\seleniumDemo1\\DriverFolder\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverLocationString);
WebDriver driver = new ChromeDriver();
driver.get("http://demo.guru99.com/test/web-table-element.php");
WebElement tableTitle = driver.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/thead"));
List <WebElement> titles = tableTitle.findElements(By.tagName("tr"));
System.out.println(titles.size());
if (titles!= null) {
for(WebElement title: titles) {
List <WebElement> columNames = title.findElements(By.tagName("th"));
if (columNames!= null) {
for (int i = 0; i < columNames.size(); i++) {
System.out.print(columNames.get(i).getText()+" ");
}
System.out.println();
}
}
}
WebElement tableContent = driver.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody"));
List<WebElement> contents = tableContent.findElements(By.tagName("tr"));
System.out.println(contents.size());
if (contents!=null) {
for(WebElement row: contents) {
List<WebElement> columElements = row.findElements(By.tagName("td"));
if (columElements!=null) {
for(WebElement colum: columElements) {
System.out.print(colum.getText()+" ");
}
}
System.out.println();
}
}
driver.quit(); // using QUIT all windows will close
}
Alert
- 点击cancel:driver.switchTo().alert().dismiss();
- 点击ok: driver.switchTo().alert().accept();
- 获取alert message: driver.switchTo().alert().getText();
- 输入信息: driver.switchTo().alert().sendKeys("Text");
处理Pop-up Window
在自动化测试中,一个Web应用会打开多个窗口来使用, 有时候我们需要在不同的窗口中进行切换; 当完成操作后, 也需要返回到parent窗口。
在Selenuim中,WebDriver 也会处理多个窗口。
Driver.getWindowHandles();
处理多个已经打开的窗口,可以使用该class来彼此切换, 返回Iterator<String>
Driver.getWindowhandle()
处理当前当前的窗口;
- 打开网站:http://demo.guru99.com/popup.php
- 点击“Click Here” 新的窗口就会打开
- 新的窗口打开需要用户输入email
- 输入Email点击submit
- 显示access details
import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class WindowHandle_Demo {
public static void main(String[] args) throws InterruptedException {
WebDriver driver=new FirefoxDriver();
//Launching the site.
driver.get("http://demo.guru99.com/popup.php");
driver.manage().window().maximize();
driver.findElement(By.xpath("//*[contains(@href,'popup.php')]")).click();
String MainWindow=driver.getWindowHandle();
// To handle all new opened window.
Set<String> s1=driver.getWindowHandles();
Iterator<String> i1=s1.iterator();
while(i1.hasNext())
{
String ChildWindow=i1.next();
if(!MainWindow.equalsIgnoreCase(ChildWindow))
{
// Switching to Child window
driver.switchTo().window(ChildWindow);
driver.findElement(By.name("emailid"))
.sendKeys("[gaurav.3n@gmail.com](mailto:gaurav.3n@gmail.com)");
driver.findElement(By.name("btnLogin")).click();
// Closing the Child Window.
driver.close();
}
}
// Switching to Parent window i.e Main Window.
driver.switchTo().window(MainWindow);
}
} </pre>
CheckBox and Radio Button
-
Radio button: 使用click()
radioElement.click() -
CheckBox
切换checkbox是on还是off, 也需要使用click()
checkboxElement.click()
检查checkbox是否被点击选择: isSelected()
isSelected()
注意:
增加 wait() 在findelement之前; 使用隐式或显式的wait
Image Link
推荐使用By.cssSelector和属性“Title”来找到image link的元素
cssSelector
处理DropDown以及多选项
-
DropDown: 需要import jar org.openqa.selenium.support.ui.Select
-
new一个Select的实例
sample
1
2
3 -
多选
multiple Select
Tooltip
Tooltip 是当鼠标移动到一个元素的时候出现的提示文本。Tooltip 一般都会作为一个元素的 Title 属性。这个属性的值会随着鼠标的移动而显示。这是一个静态的文本知识信息。
现在,tooltip 已经是可以包含很多的格式、
- 对于静态tooltip 的获取, 直接使用“title” 属性值来获得
- 对于包含各种格式的, 需要使用“Advanced User Interactions API”
advanced User Interactions API的简介
高级用户交互api 是一种为用户行为如drag drop hovering 多选 鼠标释放等行为的API
我们可以获取更多的细节:链接
- 首先导入需要的jar包: Action Actions
- 创建一个“Actions”的对象,建立用户操作的序列, 如 moveToElement(), dragAndDrop()等; driver会被当做是Actions类的一个参数
Actions builder = new Actions(driver);
builder.clickAndHold(slider).moveByOffset(50,0).release();
- 创建Action 对象;调用perform来执行actions对象的build操作。
Action slideAction = builder.build();
slideAction.perform();
网友评论