selenium(五)
1.等待时间
(1)使用线程等待
Thread.sleep(3000);
(2)等待直到所有元素加载完成(隐式等待 driver)
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)
(3)等待直到某一个元素加载完成(显式等待 WebDriverWait)
public void waitElement(WebDriver driver, int time, final String xpathstr){ WebDriverWait wait = new WebDriverWait(driver,time); wait.until(new ExpectedCondition<WebElement>(){ @Override public WebElement apply(WebDriver d) { return d.findElement(By.xpath(xpathstr)); } }); }
2.获取cookie
Set<Cookie> cookies = dr.manage().getCookies();
同样有 addCookie 和 deleteCookie
3.截图
需要添加 Apache 的 io 包: https://mvnrepository.com/artifact/commons-io/commons-io
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
代码如下
//设置文件路径
String screenShotName="E:\\scrShoot.png"; //新建文件 File scrShoot=new File(screenShotName); //截图 File tmp=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//将截图的临时文件拷贝到 新建的scrShoot FileUtils.copyFile(tmp,scrShoot);
4.iframe 处理
元素定位时如果遇到iframe,driver需要进入iframe中,才能定位到iframe中的元素,跳转iframe需要层层跳转,就像画中画一样
进入iframe:driver.switchTo().frame(参数),参数可为 iframe的 id、name,webElement,int i( i 表示 iframe的index)
回到原网页:driver.switchTo().defaultContent();
5.多窗口 处理
当操作某个元素弹出第二个窗口时,driver需要进入第二个窗口才能定位到该窗口的元素,可以通过句柄来切换窗口
获取句柄:
一个窗口,一个句柄:String defaultWindow=driver.getWindowHandle();
多个窗口,多个句柄:Set<String> windows=driver.getWindowHandles();
切换窗口:driver.switchTo().window(String s); 参数s是句柄
driver.get("http://www.qq.com"); //获取第一个句柄 String defaultWindow=driver.getWindowHandle(); //打开新窗口,并且等待一下,等待元素加载 driver.findElement(By.linkText("新闻")).click(); Thread.sleep(3000); //获取所有句柄 Set<String> windows=driver.getWindowHandles(); for(String window:windows){ //也可以写为!window.endsWith(defaultWindow) if(!window.equals(defaultWindow)){ //driver切换到第二个窗口,并且等待一下 driver=driver.switchTo().window(window); Thread.sleep(3000); } } //第二个页面操作元素 driver.findElement(By.linkText("推荐")).click(); Thread.sleep(3000); //关闭第二个窗口 driver.close(); //切回原窗口 driver.switchTo().window(defaultWindow); driver.findElement(By.linkText("图片")).click();
也可以通过判断窗口的 title 来切换窗口
7. alert弹出框
操作某些元素时,可能会出现一个弹框,不处理这个弹框可能就无法操作页面元素,这时需要将driver切进弹框中
跳入弹框:Alert alert=driver.switchTo().alert();
一般弹框只有以下几种操作:
点击确定:alert.accept( );
点击取消:alert.dismiss( )
获取文本:alert.getText( );
输入内容:alert.sendKeys( );
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具