Appium Android:如何测试WebView中显示的PDF文件
Android WebView中PDF条款测试后续步骤
1. 从Script内容中提取PDF路径
你已经获取到script标签的innerHTML,接下来需要从这段代码里解析出PDF的实际地址(远程URL或本地文件路径)。通常这类_init方法里会包含PDF的加载参数,比如类似loadPDF('https://xxx/terms.pdf')的结构。
可以用字符串匹配或正则表达式提取路径,示例代码如下:
// 正则匹配示例(需根据实际script内容调整规则) Pattern pattern = Pattern.compile("loadPDF\\('(.*?)'\\)"); Matcher matcher = pattern.matcher(htmlCode); if (matcher.find()) { String pdfPath = matcher.group(1); // 拿到PDF路径后进入下一步验证 }
注意:你的原代码里使用了中文引号(比如
“WEBVIEW_”),实际运行时要替换为英文引号,否则会抛出语法错误。
2. 验证PDF内容的两种方案
方案一:直接获取PDF文件并验证
- 如果PDF是远程URL:用HTTP客户端(如OkHttp)请求该URL,下载PDF后用PDF解析库(如Apache PDFBox)读取内容,检查关键条款是否存在:
// 示例:用PDFBox读取远程PDF内容 URL pdfUrl = new URL(pdfPath); PDDocument document = PDDocument.load(pdfUrl.openStream()); PDFTextStripper stripper = new PDFTextStripper(); String pdfContent = stripper.getText(document); // 验证关键文本 assert pdfContent.contains("用户不得擅自复制本条款"); document.close();
- 如果PDF是本地路径:用Appium的文件操作API读取设备上的PDF文件,再用PDF解析库验证:
// 示例:读取设备本地PDF String localPdfPath = "/sdcard/Android/data/com.your.app/files/terms.pdf"; byte[] pdfBytes = ((AndroidDriver) getBaseMobileDriver()).pullFile(localPdfPath); PDDocument document = PDDocument.load(new ByteArrayInputStream(pdfBytes)); // 后续验证逻辑同上
方案二:直接在WebView中操作PDF阅读器控件
如果WebView内嵌了PDF阅读器(如Chrome的PDF查看器),可以直接定位阅读器控件进行交互验证:
- 定位搜索框(如果有),输入关键条款文本,验证是否能找到内容:
// 示例:定位PDF阅读器的搜索输入框(需根据实际页面元素调整XPath) WebElement searchBox = getBaseMobileDriver().findElement(By.xpath("//input[@type='text' and @aria-label='搜索']")); searchBox.sendKeys("隐私政策"); // 验证搜索结果是否存在 assert getBaseMobileDriver().findElements(By.xpath("//div[contains(text(),'隐私政策')]")).size() > 0;
- 验证PDF的分页、滚动等交互是否正常:
// 示例:滚动PDF页面 JavascriptExecutor js = (JavascriptExecutor) getBaseMobileDriver(); js.executeScript("window.scrollBy(0, 500)"); // 验证当前显示区域的内容
3. 切换回原生上下文(可选)
测试完成后,记得切换回原生App上下文,避免影响后续测试:
((AndroidDriver) getBaseMobileDriver()).context("NATIVE_APP");
内容的提问来源于stack exchange,提问作者DeepakVerma
相关产品推荐
相关产品推荐

