通过TimeOuts 对象进行全局页面加载超时的设置,该设置必须放置get 方法之前。如下代码:
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS); driver.get("https://www.baidu.com");如果百度首页在超过5秒钟没有加载完毕,程序就会抛出异常,如果在 2秒就加载完了,就直接往下执行,如果需要对页面加载时间有要求的,可以用这个设置进行检验。
第七章 特殊元素操作 7.1.弹出框处理(alert、confirm)操作alert、confirm弹出框,可以通过Alert 对象来进行操作,Alert类包含了确认、取消、输入和获取弹出窗内容。
Alert对应属性和方法:
方法 描述Alert.getText() 获取弹出框内容。
Alert.accept() 接受弹窗的提示,相当于点击确认按钮。
Alert.dismiss() 取消提示窗。
Alert.sendKeys(String s) 给弹窗输入内容。
简单使用示例:
// 首先需要切换到弹出框中,获取Alert对象。 Alert alert = driver.switchTo().alert(); // 获取弹窗文本内容 alert.getText(); // 点击确定按钮 alert.accept(); // 点击取消按钮 alert.dismiss();注:如果弹出框不是 js 原生的 alert 弹窗,我们还是按照原来的获取元素的方法。
7.2.iframe 切换有时候我们定位元素的时候,发现怎么都定位不了。 这时候你需要查一查你要定位的元素是否在iframe里面。
什么是iframe?
iframe 就是HTML 中,用于网页嵌套网页的。 一个网页可以嵌套到另一个网页中,可以嵌套很多层。
例如:
main.html
<html> <head> <title>FrameTest</title> </head> <body> <div>this is main page's div!</div> <input type="text" /> <br/> <iframe frameborder="0" scrolling="no" src="http://www.likecs.com/frame.html"></iframe> </body> </html>frame.html
<html> <head> <title>this is a frame!</title> </head> <body> <div>this is iframes div,</div> <input></input> </body> </html>使用selenium 操作浏览器时,如果需要操作iframe中的元素,首先需要切换到对应的内联框架中。
selenium 给我们提供了三个重载的方法,进行操作iframe;
切换方法:
// 方法一:通过 iframe的索引值,在页面中的位置 driver.switchTo().frame(index); // 方法二:通过 iframe 的name 或者id driver.switchTo().frame(nameOrId); // 方法三:通过iframe 对应的webElement driver.switchTo().frame(frameElement);selenium 代码:
public static void testIframe(WebDriver driver){ // 在 主窗口的时候 driver.findElement(By.id("maininput")).sendKeys("main input"); // 此时 没有进入到iframe, 以下语句会报错 //driver.findElement(By.id("iframeinput")).sendKeys("iframe input"); driver.switchTo().frame("frameA"); driver.findElement(By.id("iframeinput")).sendKeys("iframe input"); // 此时没有在主窗口,下面语句会报错 //driver.findElement(By.id("maininput")).sendKeys("main input"); // 回到主窗口 driver.switchTo().defaultContent(); driver.findElement(By.id("maininput")).sendKeys("main input"); }