Java-Selenium
1:环境
Maven环境
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
2:八大定位方式
ID:
webDriver.findElement(By.id(""));
NAME:
webDriver.findElement(By.name(""));
XPATH:
webDriver.findElement(By.xpath("/html/body/form"));//绝对路径从html开始
webDriver.findElement(By.xpath("//form[@id="loginForm"]"));//相对路径
webDriver.findElement(By.xpath("//input[@name="continue"][@type="submit"]"));//通过属性和值
CLASSNAME:
webDriver.findElement(By.className(""));
CSS:
webDriver.findElement(By.cssSelector("input#kw"));//input的ID为kw #表示ID
webDriver.findElement(By.cssSelector("input.kw"));//input的Class为kw .表示class
LINK:
webDriver.findElement(By.linkText(""));//精确定位
webDriver.findElement(By.partialLinkText(""));//模糊定位
TARNAME:
webDriver.findElements(By.tagName(""));
3:API操作
打开指定页面:
webDriver.get("http://www.baidu.com/");
关闭:
webDriver.quit();
webDriver.close();
窗口最大化:
webDriver.manage().window().maximize();
获取URL:
webDriver.getCurrentUrl();
获取可见元素文本:
ele.getText()
获取隐藏元素文本:
ele.getAttribute("textContent");
获取属性值:
ele.getAttribute("");
重定向:
webDriver.navigate().to("http://news.baidu.com/");
后退/前进/刷新:
webDriver.navigate().back();
webDriver.navigate().forward();
webDriver.navigate().refresh();
清空文本:
ele.clear();
下拉框:
//创建Select对象
Select select=new Select(ele);
//获取方式1
select.selectByVisibleText("");
//获取方式2
select.selectByValue("");
//获取方式3
select.selectByIndex();
三种等待:
强制等待:由Java提供
Thread.sleep(3000);
隐式等待:作用于页面上所有元素,只设置一次,在规定时间内元素加载,直接执行,不再等待,如果超出等待时间,抛出异常
//页面加载数值和单位 如果未加载完成则抛出异常
Wait.webDriver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
//隐式等待加载页面所有元素
Wait.webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
显示等待:为某个特定的元素设置等待时间(例如登陆后进行断言)
//第一个参数为WebDriver对象,第二个参数为等待总时间单位为s,第三个参数为查看间隔时间单位为毫秒
WebDriverWait webDriverWait=new WebDriverWait(webDriver,5,1000);
//显示等待获取元素的方式 new 接口的匿名子类重写apply方法
WebElement webElement=webDriverWait.until(new ExpectedCondition<WebElement>() {
@NullableDecl
@Override
public WebElement apply(@NullableDecl WebDriver webDriver) {
return webDriver.findElement();
}
});
组合键:
//删除
kw.sendKeys(Keys.BACK_SPACE);
//空格
kw.sendKeys(Keys.SPACE);
//ctrl A
kw.sendKeys(Keys.CONTROL,"A");
//ctrl C
kw.sendKeys(Keys.CONTROL,"C");
//ctrl V
kw.sendKeys(Keys.CONTROL,"V");
//回车
kw.sendKeys(Keys.ENTER);
窗口切换:
//获取当前窗口句柄
String windowHandleOld = webDriver.getWindowHandle();
//获取所有窗口句柄
Set<String> windowHandles = webDriver.getWindowHandles();
//遍历句柄,如果切换后的url等于期望的则不在遍历,跳出循环
Iterator<String> iterator = windowHandles.iterator();
while (iterator.hasNext()){
String next = iterator.next();
webDriver.switchTo().window(next);
Thread.sleep(1000);
if("".equals(webDriver.getCurrentUrl())){
break;
}
}
iframe切换:
//通过iframe的webelement对象
WebElement ele = webDriver.findElement();
webDriver.switchTo().frame(ele);
//通过索引
webDriver.switchTo().frame();
//通过name或者Id
webDriver.switchTo().frame("");
//切换进主窗口
webDriver.switchTo().defaultContent();//返回最外面的窗口,主窗口
webDriver.switchTo().parentFrame();//返回上一级窗口
4:Junit5
1:所有用例前置方法
@BeforeAll
public static void beforeAll(){}
2:所有用例后置方法
@AfterAll
public static void afterAll(){}
3:各个用例前置方法
@BeforeEach
public void beforeEach(){}
4:各个用例后置方法
@AfterEach
public void afterEach(){}