原文链接: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
作者原创技术文章,转载请注明出处