首页 > 代码库 > Selenium自动化读取H5手机缓存

Selenium自动化读取H5手机缓存

原文链接:http://www.cnblogs.com/zishi/p/6890675.html

前言:

由于Selenium本身并不包括读取H5手机缓存的封装,所以考虑使用JavascriptExecutor接口实现。

JavascriptExecutor接口简介:

接口声明: 
public interface JavascriptExecutor
 
表示驱动程序可以执行JavaScript,提供对机制的访问。
 
由于跨域策略,浏览器强制执行脚本执行可能会意外失败,且没有足够的错误消息传递。
这在创建自己的XHR请求或尝试访问另一个帧(frame)时特别有用。 大多数情况下在排除故障时,最好在执行WebDriver请求后查看浏览器的控制台。
 
所有已知实施类:
ChromeDriver, EdgeDriver, EventFiringWebDriver, FirefoxDriver, InternetExplorerDriver, OperaDriver, RemoteWebDriver, SafariDriver
 
接口方法概览:
接口方法一:
executeAsyncScript(java.lang.String script, java.lang.Object... args)
方法概述:在当前选定的框架或窗口的上下文中执行异步JavaScript。
 
接口方法二:
executeScript(java.lang.String script, java.lang.Object... args)
方法概述: 在当前选定的框架或窗口的上下文中执行JavaScript。
在当前选定的框架或窗口的上下文中执行JavaScript。 提供的脚本片段将作为匿名函数的主体执行。在脚本中,使用文档来引用当前文档。 请注意,脚本完成执行后,尽管全局变量将持续存在,但局部变量将不可用。
 
如果脚本具有返回值(即如果脚本包含返回语句),则将执行以下步骤:
  •      对于HTML元素,此方法返回WebElement
  •      对于十进制,返回Double
  •      对于非十进制数,返回Long
  •      对于一个布尔值,返回一个布尔值
  •      对于所有其他情况,返回一个String
  •      对于一个数组,返回一个List <Object>,每个对象遵循上面的规则。 我们支持嵌套列表。
  •      除非值为空或没有返回值,否则返回null
参数必须是数字,布尔值,String,WebElement或以上任何组合的列表。 如果参数不符合这些条件,将抛出异常。 这些参数将通过“参数”魔术变量提供给JavaScript,就像通过“Function.apply”调用函数一样。
 
参数:
     脚本 - 要执行的JavaScript
     args - 脚本的参数。 可能是空的
返回:
     Boolean,Long,Double,String,List或WebElement之一。 或空。
 
实战Demo:
如何用JavascriptExecutor 读取手机LocalStorge键值(节选主要实现代码) 
//注:storagename是期望读取的LocalStorge键值
//public interface IWebDriver    Member of OpenQA.Selenium
public static string GetLocalStorgeKey( IWebDriver driver, string storagename)
        {
            string js = "return window.localStorage.getItem(‘" + storagename + "‘);";
            IJavaScriptExecutor jse = (IJavaScriptExecutor )driver;
            return (String )jse.ExecuteScript(js);
        }

 

类似的写缓存操作应该调用setItem方法:localStorage.setItem(‘testObject‘, ‘abc‘);

伪代码(未调试)就应该如下:(注:此处set方法不需要返回值)

 

stringjs ="window.localStorage.setItem(‘"+ storagename +"‘,‘"+ storagevalue +"‘);";
IJavaScriptExecutor jse = (IJavaScriptExecutor )driver;
jse.ExecuteScript(js);

 

 

主要参考文献:
JavascriptExecutor:
http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html
HTML5 Local Storage:
https://www.w3schools.com/html/html5_webstorage.asp
Storing Objects in HTML5 localStorage:
http://stackoverflow.com/questions/2010892/storing-objects-in-html5-localstorage
 
 作者原创技术文章,转载请注明出处
 

Selenium自动化读取H5手机缓存