J.L*_*ong 2 javascript e2e-testing cypress
测试目标是确认如果用户上传新图片,上传图片的 'src' 属性会发生变化,这意味着图片已更改。
我尝试使用几种方法,概述如下。
第一种方法
cy.get('.img').then($img => {
//store the src
const source = $('img').attr('src');
/**
* File drop 2mb jpg
*/
cy.fixture(Cypress.env("JPG_2MB_ASSET"), "base64").then(fileContent => {
cy.get(".dropzone").upload(
{
fileContent,
fileName: "sampleimage.jpg",
mimeType: "image/jpeg"
},
{ subjectType: "drag-n-drop" }
);
});
cy.wait(16000);
cy.get('img')
.attr('src')
.should($src2 => {
expect($src2).not.to.eq(source);
});
Run Code Online (Sandbox Code Playgroud)
第二种方法
//store the src
const source = $img.attr('src')
/**
* File drop 2mb jpg
*/
cy.fixture(Cypress.env("JPG_2MB"), "base64").then(fileContent => {
cy.get(".dropzone").upload(
{
fileContent,
fileName: "sampleimage.jpg",
mimeType: "image/jpeg"
},
{ subjectType: "drag-n-drop" }
);
});
cy.wait(16000);
cy.get("img").attr('src').should(($src2) => {
expect($src2).not.to.eq(source)
Run Code Online (Sandbox Code Playgroud)
第三种方法
cy.get("img")
.attr("src")
.then($src1 => {
/**
* File drop 2mb jpg
*/
cy.fixture(Cypress.env("JPG_2MB"), "base64").then(fileContent => {
cy.get(".dropzone").upload(
{
fileContent,
fileName: "sampleimage.jpg",
mimeType: "image/jpeg"
},
{ subjectType: "drag-n-drop" }
);
});
cy.wait(16000);
cy.get('img')
.attr('src')
.should($src2 => {
expect($src2).not.to.eq($src1);
});
Run Code Online (Sandbox Code Playgroud)
上传效果很好,但 src 的比较没有。
第一种和第二种方法
预期 - 它将第一张图像的 src 存储为 const source,并丢弃 2mb jpg。然后将第二个图像的 src 与第一个图像的 src 进行比较并确认它们不同。
结果- ReferenceError: $ is not defined
第三种方法
预期 - 它将第一个 src 存储为$src1,然后将其与第二个 src 进行比较,$src2
结果- cy.get(...).attr is not a function
在对我的键盘感到愤怒之后,我找到了成功的解决方案。
使用invoke您可以存储 attr 之类的值src,如下所示:https :
//docs.cypress.io/api/commands/invoke.html#Arguments-are-automatically-forwarded-to-the-function
因此,在对上述尝试进行一些调整后,我发现它可以完美运行:
cy.get('.image-root img').invoke('attr', 'src').then((firstSrc) => {
const src1 = firstSrc
/**
* File drop 2mb jpg
*/
cy.fixture(Cypress.env("JPG_2MB"), "base64").then(fileContent => {
cy.get(".dropzone").upload(
{
fileContent,
fileName: "sampleimage.jpg",
mimeType: "image/jpeg"
},
{ subjectType: "drag-n-drop" }
);
});
cy.wait(16000);
cy.get('.image-root img').invoke('attr', 'src').then((nextSrc) => {
expect(nextSrc).to.not.equal(src1)
});
});
Run Code Online (Sandbox Code Playgroud)