1. 操作cookie

 // 增加一个 name = "name",value="value" 的 cookie
Cookie cookie = new Cookie("name", "value");
driver.manage().addCookie(cookie);
// 得到当前页面下所有的 cookies ,并且输出它们的所在域、name、value、有效日期和路径
Set<Cookie> cookies = driver.manage().getCookies();
System.out.println(String.format("Domain -> name -> value -> expiry -> path"));
for(Cookie c : cookies)
System.out.println(String.format("%s -> %s -> %s -> %s -> %s",c.getDomain(), c.getName(), c.getValue(),c.getExpiry(),c.getPath()));
}

  删除 cookie

 // 第一种通过 cookie 的 name
driver.manage().deleteCookieNamed("CookieName");
// 第二种通过 Cookie 对象(Cookie cookie)
driver.manage().deleteCookie(cookie);
// 第三种全部删除
driver.manage().deleteAllCookies();

2. 等待页面元素加载完成

 // (1) 强制等待弊端较多,会造成时间的浪费或者休眠时间不够
Thread.sleep(2000); // (2) 加入循环等待优化
long start = System.currentTimeMillis();
while (true) {
Thread.sleep(500);
if (driver.getTitle().indexOf("期望值") != -1)
break;
if (System.currentTimeMillis() - start >= 10000)
break;
}

  隐形等待,设置全局元素等待超时时间。隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver 查询Dom一定时间。默认值是0, 但是设置之后,这个时间将在WebDriver 对象实例整个生命周期都起作用。但这里有一个弊端,那就是程序会在设定的时间内一直等待整个页面加载完成,才会执行下一步,有时候个别JS加载比较慢会比较浪费时间。

 // 设置隐形等待时间10s
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  显性等待,使用ExpectedConditions类中自带方法,可以进行显试等待的判断。只有满足显式等待的条件满足,代码才会继续向后执行,如果超过设定的最大显式等待时间, 这程序会抛出异常。如果同时设置隐性等待和显性等待,取最大等待时间。

 // 设置显性等待时间,最大等待10秒
WebDriverWait wait = new WebDriverWait(driver, 10);
//(1)页面元素是否在页面上可用和可被单击
WebElement we = wait.until(ExpectedConditions.elementToBeClickable(By locator));
//(2)页面元素处于被选中状态
Boolean boolean = wait.until(ExpectedConditions.elementToBeSelected(WebElement element));
//(3)页面元素在页面中存在
WebElement we = wait.until(ExpectedConditions.presenceOfElementLocated(By locator));
//(4)在页面元素中是否包含特定的文本
Boolean boolean = wait.until(ExpectedConditions.textToBePresentInElement(WebElement element, String text));
Boolean boolean = wait.until(ExpectedConditions.textToBePresentInElement(By locator, String text));//弃用
//(5)页面元素值是否出现
Boolean boolean = wait.until(ExpectedConditions.textToBePresentInElementValue(By locator, String text));
Boolean boolean = wait.until(ExpectedConditions.textToBePresentInElementValue(WebElement element, String text));
//(6)标题是否包含text
Boolean boolean = wait.until(ExpectedConditions.titleContains(String title));
//(7)元素可见
WebElement we = wait.until(ExpectedConditions.visibilityOfElementLocated(By locator));
//(8)元素不可见消失
Boolean boolean = wait.until(ExpectedConditions.invisibilityOfElementLocated(By locator));

3. 页面截图

 // 得到截图并保存在C盘下 截取页面全图,不管页面多长
File screenShotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
// org.apache.commons.io.FileUtils.copyFile
FileUtils.copyFile(screenShotFile, new File("C:/test.png"));

4. 执行JS脚本

 // 创建JavascriptExecutor对象
JavascriptExecutor js = (JavascriptExecutor) driver;
// 设置日期控件的读写属性
js.executeScript("document.getElementById(\"fromDate\").readOnly=false");
// 直接为日期控件强行赋值
js.executeScript("document.getElementById('id').setAttribute('value','2018-05-10');");

Java+selenium之WebDriver的cookie,等待等高级操作(五)的更多相关文章

  1. 《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)

    1.简介 上一篇讲解和分享了如何获取浏览器窗口的句柄,那么今天这一篇就是讲解获取后我们要做什么,就是利用获取的句柄进行浏览器窗口的切换来分别定位不同页面中的元素进行操作. 2.为什么要切换窗口? Se ...

  2. Java Selenium中的几种等待方式

    Selenium自动化性能测试过程中,经常会出现取不到界面元素,主要原因是界面元素的加载与我们访问页面的时机不一致.可能是界面要素过多或者网络较慢,界面一直加载中:为了解决这种问题,selenium提 ...

  3. Java+selenium之WebDriver的常用方法封装(八)

    总结:WEB UI自动化测试一般采用 POP(面向页面编程),自动化测试框架分三层,有时如果页面如果太多,不好管理,可以面向控件编程,即把控件当作页面,毕竟控件是有限的,所以封装页面的代码量会少很多, ...

  4. Java+selenium之WebDriver对浏览器的简单操作(一)

    操作浏览器的主要方法都来自 org.openqa.selenium.WebDriver 这个接口 这些方法都是在 org.openqa.selenium.remote.RemoteWebDriver这 ...

  5. Java+selenium如何清理浏览器Cookie

    一.场景:在未注销系统切换不同账号登录系统下,登录会有浏览器缓存,导致登录时间异常缓慢.跟开发浏览器缓存处理机制有关系. 二.解决方法: 获取浏览器Cookie,在Login方法前增加清除缓存的代码. ...

  6. selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)

    隐式等待是等页面加载,不是等元素!!! 1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码.显式等待是等元素加载!!! 2.隐式等待,相当于设置全局的等待,在定位 ...

  7. Java+selenium之WebDriver的抛出异常分析(七)

    NoSuchElementException 1.检查元素的定位器是否正确 2.如果定位器正确,增加休眠时间 3.等待了足够的时间依然找不到的话,更换定位器的定位方式 NoSuchWindowExce ...

  8. Java+selenium之WebDriver模拟鼠标键盘操作(六)

    org.openqa.selenium.interactions.Actions类,主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作.对于这些操作,使用 perform()方法进行执行 ...

  9. Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)

    1. iframe 的处理 查找元素必须在对应的 ifarme 中查找,否则是找不到的 // 传入参数为 frame 的序号,从0开始 driver.switchTo().frame(Int inde ...

随机推荐

  1. Gradle的使用

    ⒈下载 点击此处 ⒉安装 1.解压 2.添加环境变量GRADLE_HOME 指向解压缩文件的磁盘地址 3.PATH环境变量添加%GRADLE_HOME%\bin ⒊使用阿里云仓库 repositori ...

  2. 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数

    [转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...

  3. (转载)ECCV 2018:IBN-Net:打开域适应的新方式

    (本文转自极视角) 本文由香港中文大学发表于ECCV2018,论文探索了IN和BN的优劣,据此提出的IBN-Net在语义分割的域适应任务上取得了十分显著的性能提升. 论文地址:https://arxi ...

  4. Linux 文件系统IO性能优化【转】

    转自:https://blog.csdn.net/doitsjz/article/details/50837569 对于LINUX SA来说,服务器性能是需要我们特别关注的,包括CPU.IO.内存等等 ...

  5. XAF 框架中,自定义参数动作(Action),输入参数的控件可定义,用于选择组织及项目

    XAF 框架中,如何生成一个自定义参数动作(Action),输入参数的控件可定义? 参考文档:https://documentation.devexpress.com/eXpressAppFramew ...

  6. JavaScript使用方法和技巧大全

        有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通Ja ...

  7. WM_COMMAND消息

    原文地址:https://blog.csdn.net/whm243149796/article/details/78966065 当用户点击菜单.按钮.下拉列表框等控件时候,会触发WM_COMMAND ...

  8. macbook 安装win7

    长按option进入启动选择页面,选择winpe后进入安装,与普通电脑没有区别.安装后需要安装苹果专用驱动程序Boot Camp,才可以正常使用触控板等驱动

  9. 将C注册到lua环境中使用

    注册到lua的方式有两种,一种是lua解释器,如果支持动态链接,使用动态链接机制,将函数接口编译成动态链接库,然后将动态链接库放到lua的C路径(LUA_CPATH)中,然后在lua文件中直接使用 r ...

  10. WPA简介

    摘选自 https://www.sohu.com/a/199641521_683126 WPA 全名 WI-FI Protected Access, 有WPA 和WPA2两个标准,是一种保护无线网络的 ...