WebDriverAPI(10)
操作Frame页面元素
测试网址代码
frameset.html:
<html>
<head>
<title>frameset页面</title>
</head>
<frameset cols="25%,50%,25%">
<frame id="leftframe" src="frame_left.html">
<frame id="middleframe" src="frame_middle.html">
<frame id="rightframe" src="frame_right.html">
</frameset>
</html>
frame_left.html:
<html>
<head>
<title>左侧frame</title>
</head>
<body>
<p>这是左侧frame页面上的文字</p>
</body>
</html>
frame_middle.html:
<html>
<head>
<title>中间frame</title>
</head>
<body>
<p>这是中间frame页面上的文字</p>
</body>
</html>
frame_right.html:
<html>
<head>
<title>右侧frame</title>
</head>
<body>
<p>这是右侧frame页面上的文字</p>
</body>
</html>
Java语言版本API实例
@Test
public void testHandleFrame() {
driver.manage().window().maximize();
driver.get(url);
//找到左边的frame
driver.switchTo().frame("leftframe");
WebElement leftFrameText = driver.findElement(By.xpath("//p"));
Assert.assertEquals("这是左侧frame页面上的文字", leftFrameText.getText());
//返回frameset上,不返回则无法进入其他frame
driver.switchTo().defaultContent();
driver.switchTo().frame("middleframe");
WebElement middleFrameText = driver.findElement(By.xpath("//p"));
Assert.assertEquals("这是中间frame页面上的文字", middleFrameText.getText());
driver.switchTo().defaultContent();
driver.switchTo().frame("rightframe");
WebElement rightFrameText = driver.findElement(By.xpath("//p"));
Assert.assertEquals("这是右侧frame页面上的文字", rightFrameText.getText());
driver.switchTo().defaultContent();
//可通过frame()里面填写数字进行跳转从0开始 1代表第二个frame
driver.switchTo().frame(1);
middleFrameText = driver.findElement(By.xpath("//p"));
Assert.assertEquals("这是中间frame页面上的文字", middleFrameText.getText());
}
使用Frame中的HTML源码内容来操作Frame
测试网址代码
同上一个html代码
Java语言版本API实例
@Test
public void testHandleFrameByPageSource() {
driver.manage().window().maximize();
driver.get(url);
//找到页面的所有frame对象,并存储到frames容器中
List<WebElement>frames = driver.findElements(By.tagName("frame"));
//遍历所有包含frame的页面
for(WebElement frame:frames){
//进入frame页面
driver.switchTo().frame(frame);
//判断是否包含中间frame
if(driver.getPageSource().contains("中间frame")){
WebElement middleFrameText = driver.findElement(By.xpath("//p"));
Assert.assertEquals("这是中间frame页面上的文字", middleFrameText.getText());
break;
}else{
driver.switchTo().defaultContent();
}
}
driver.switchTo().defaultContent();
}
操作iframe的页面元素
测试网址代码
修改frame_left.html:
<html>
<head>
<title>左侧frame</title>
</head>
<body>
<p>这是左侧frame页面上的文字</p>
<iframe src='iframe.html' style="width:200px";height:50px></iframe>
</body>
</html>
在同目录下增加iframe.html
<html>
<head>
<title>iframe</title>
</head>
<body>
<p>这是iframe页面上的文字</p>
</body>
</html>
Java语言版本API实例
@Test
public void testHandleIFrame() {
driver.manage().window().maximize();
driver.get(url);
//进入左边的frame
driver.switchTo().frame("leftframe");
//找到包含iframe的页面元素
WebElement iframe = driver.findElement(By.tagName("iframe"));
//进入iframe
driver.switchTo().frame(iframe);
WebElement p = driver.findElement(By.xpath("//p"));
Assert.assertEquals("这是iframe页面上的文字", p.getText());
driver.switchTo().defaultContent();
driver.switchTo().frame("middleframe");
}
操作浏览器的cookie
测试网址
http://www.sogou.com
Java语言版本API实例
@Test
public void f() {
driver.manage().window().maximize();
driver.get(url);
Set<Cookie>cookies = driver.manage().getCookies();
Cookie newCookie = new Cookie("cookieName","cookieValue");
System.out.println(String.format("Domain->name->value->expiry->path"));
for(Cookie cookie:cookies)
System.out.println(String.format("%s-.%s->%s->%s->%s",cookie.getDomain(),cookie.getName(),cookie.getValue(),cookie.getExpiry(),cookie.getPath()));
//通过cookie的name属性删除
driver.manage().deleteCookieNamed("CookieName");
//通过cookie对象
driver.manage().deleteCookie(newCookie);
//删除所有cookie
driver.manage().deleteAllCookies();
try {
Thread.sleep(1500);
} catch (Exception e) {
e.printStackTrace();
}
}