新一代最强开源UI自动化测试神器Playwright(Java版)十(文件上传和下载)

Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员和测试人员轻松地构建和运行可靠的端到端测试。除了测试功能之外,Playwright还提供了一些实用工具和API,其中包括文件上传和下载的功能。这些功能可以帮助用户模拟用户上传或下载文件的场景,并验证这些操作是否按预期执行。在本文中,我们将探讨如何在Playwright中实现文件上传和下载,并提供一些示例代码和最佳实践。

比如平台上面的上传功能,会提供一个模板(如excel,csv),此时,我们就需要下载这个模板,修改完成后,再上传,作为测试人员,我们需要验证它是否已下载到本地。

01 文件上传

文件上传分为input和非input元素,对于input元素上传文件的,我们之前有讲解过,可以参考:新一代最强开源UI自动化测试神器Playwright(Java版)页面元素交互。

非input元素的文件上传,意味着没有类型为file的元素,我们必须使用filchooser方法。我们使用fileChooser.setFiles()方法设置需要上传的文件,只需要输入文件路径+文件名即可。

图片

图片

// 点击 Select files按钮
FileChooser fileChooser = page.waitForFileChooser(() -> page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("[Select files]")).click());
// 输入要上传的文件路径+文件名
fileChooser.setFiles(Paths.get("src/main/resources/R-C.jpg"));
// 点击 Upload files 按钮上传文件
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("[Upload files]")).click();

图片

02 文件下载

对于页下载的每个附件,都会发出Page.onDownload(handler)事件。所有这些附件都下载到一个临时文件夹中。你可以使用事件中的Download对象获取下载URL、文件系统路径和有效负载流。

Playwright下载文件非常简单,我们只需要将调用下载的click方法作为一个Runnable回调函数传递到Page类的waitForDownload()方法中。waitforDownload()执行所需的操作并等待下载完成,如果在触发下载事件之前关闭页,则会下载失败。waitForDownload()方法返回一个Download对象。下载完成后,我们可以从这个生成的Download对象中获取下载的详细信息。下载完成后,下载路径将变为可用。

Download download = page.waitForDownload(() -> {
 page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("LambdaTest.txt")).click();
});

具体代码如下

import com.microsoft.playwright.*;
import com.microsoft.playwright.options.AriaRole;

import java.nio.file.Paths;
import java.util.Arrays;

/**
 * @author 作者:测试工程师成长之路
 * @version 创建时间:2023/7/2
 * 类说明:下载文件
 */
public class DownloadTest {
    public void downloadTest() {
        try (Playwright playwright = Playwright.create()) {
            Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
                    .setArgs(Arrays.asList("-start-maximized"))
                    .setChannel("chrome")
                    .setHeadless(false));
            BrowserContext context = browser.newContext(new Browser.NewContextOptions().setViewportSize(null));
            Page page = context.newPage();
            page.navigate("https://the-internet.herokuapp.com/download");
            Download download = page.waitForDownload(() -> {
                page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("LambdaTest.txt")).click();
            });
            // 输出结果:文件下载链接:https://the-internet.herokuapp.com/download/LambdaTest.txt
            System.out.printf("文件下载链接:%s%n",download.url());
            // 获取下载所属的页面
            System.out.printf("获取下载所属的页面:%s%n",download.page());
            // 返回下载页面标题
            System.out.printf("获取要下载的文件名:%s%n",download.page().title());
            // 取消下载
            download.cancel();
            // 返回下载失败,如 cancel
            System.out.printf("文件下载失败:%s%n",download.failure());
            // 返回此下载的建议文件名。它通常由浏览器从 Content-Disposition 响应头或 download 属性计算。
            // 查看whatwg的规范。不同的浏览器可以使用不同的逻辑来计算它。
            System.out.printf("获取下载所属的页面:%s%n",download.suggestedFilename());
            // 返回文件的临时保存路径:/var/folders/z9/cgrwh_ln7w31pj_j3wj791bh0000gn/T/playwright-artifacts-qit3Fe/3ea564b4-1d4b-4801-b359-e2a6b9b7592d
            System.out.printf("文件下载保存路径:%s%n",download.path());
            // 为下载的文件指定保存路径
            download.saveAs(Paths.get("src/main/resources/LambdaTest.txt"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        DownloadTest download = new DownloadTest();
        download.downloadTest();
    }
}

Playwright相对于Selenium,上传和下载文件是非常方便的,无需借助第三方工具,大家可以在实际项目中灵活应用。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值