网站可能会公开文件供用户下载,然后从其本地计算机访问。常见的情况是下载门票、收据和行程。
此示例针对我们的测试Webshop运行,并继续下载上一次购买的收据。它包括以下步骤:
我们将通过将下载的文件与最终断言中的fixture文件进行比较来检查下载的文件是否符合预期。
我们可以用不同的方式来处理这种情况。一种可能性是执行前两个步骤,然后提取href值并使用它通过GET请求检索文件(例如,使用AXIOS执行)。
Const Pupeteer=Required(';Pupeteer;)Const axios=Required(';axios';)const fs=Required(';fs';)const assert=Required(';chai&39;).assert;(async()=>;{const Browser=等待木偶戏。启动()Const page=等待浏览器。NewPage()正在等待页面。转到(';https://danube-webshop.herokuapp.com/';)等待页面。SetViewport({width:1200,Height:800})正在等待页面。WaitForSelector(#39;#login';)正在等待页面。单击(#39;#login';)等待页面。WaitForSelector(#39;#n-email';)正在等待页面。键入(';#n-email';,进程.env。USER_EMAIL)等待页面。键入(';#n-password2';,进程.env。USER_PASSWORD)等待页面。WaitForSelector(#39;#goto-signin-btn&39;)正在等待页面。单击(#GOTO-SIGNIN-BTN&39;)等待页面。WaitForSelector(';#goto-signin-btn';,{HIDDED:TRUE})正在等待页面。单击(#39;#帐户';)等待页面。WaitForSelector(';#Orders>;ul>;li:nth-Child(1)>;a';)常量下载URL=等待页面。$eval(';#order>;ul>;li:nth-Child(1)>;a';,(El)=>;el.href)常量响应=等待axios。Get(DownloadUrl)const newFile=Buffer。From(Response.Data)常量testFile=等待fs。ReadFileSync(';fixtures/testfile.pdf';)Assert(newFile.。等于(TestFile))等待浏览器。Close()})()。
Const{铬}=要求(';剧作家)const axios=要求(';axios';)const fs=要求(';fs';)const assert=要求(';chai';).assert;(async()=>;{const Browser=等待铬。启动()Const page=等待浏览器。NewPage()正在等待页面。转到(';https://danube-webshop.herokuapp.com/';)等待页面。单击(#39;#login';)等待页面。键入(';#n-email';,进程.env。USER_EMAIL)等待页面。键入(';#n-password2';,进程.env。USER_PASSWORD)等待页面。单击(#GOTO-SIGNIN-BTN&39;)等待页面。单击(#39;#帐户';)等待页面。WaitForSelector(';#Orders>;ul>;li:nth-Child(1)>;a';)常量下载URL=等待页面。$eval(';#order>;ul>;li:nth-Child(1)>;a';,(El)=>;el.href)常量响应=等待axios。Get(DownloadUrl)const newFile=Buffer。From(Response.Data)常量testFile=等待fs。ReadFileSync(';fixtures/testfile.pdf';)Assert(newFile.。等于(TestFile))等待浏览器。Close()})()。
我们也可以直接单击链接,等待下载事件,然后继续比较。等待下载事件目前由PLAYWRITER支持,但Puppeteer不支持。
请注意,在这种情况下,我们需要在浏览器上下文中启用下载,然后才能继续。
Const{Cr}=Required(';playwright';)const fs=Required(';fs';)const assert=Required(';chai';).assert;(async()=>;{const Browser=等待铬。启动()常量上下文=等待浏览器。NewContext({ceptDownloads:true})Const page=等待上下文。NewPage()正在等待页面。转到(';https://danube-webshop.herokuapp.com/';)等待页面。单击(#39;#login';)等待页面。键入(';#n-email';,进程.env。USER_EMAIL)等待页面。键入(';#n-password2';,进程.env。USER_PASSWORD)等待页面。单击(#GOTO-SIGNIN-BTN&39;)等待页面。单击(#39;#帐户';)等待页面。WaitForSelector(';#Orders>;ul>;li:nth-Child(1)>;a&39;)const[Download]=等待承诺。全部([第页。WaitForEvent(下载),页面。单击(';#Orders>;ul>;li:nth-Child(1)>;a';))const path=等待下载。Path()const newFile=等待fs。ReadFileSync(Path)const testFile=await fs。ReadFileSync(';fixtures/testfile.pdf';)Assert(newFile.。等于(TestFile))等待浏览器。Close()})()