问题描述
我正在练习并试图在文件中写入来自亚马逊的“汽车”的所有名称和链接。 以下代码正在运行,但只会在 txt 文件中写入一行。我怎样才能写出完整的清单?也许作为一个对象?
有没有更好的方法来做到这一点?
it.only("amazon cars",() => {
cy.get("input#twotabsearchtextBox").type("cars{enter}");
cy.get(".s-main-slot")
.find("div>h2>a>span")
.each((element) => {
const elname = element.text();
cy.wrap(element)
.parent()
.invoke("attr","href")
.then((href) => {
cy.writeFile("element.txt",`${elname} and its link ${href}`);
});
});
});
解决方法
您可以使用 append mode of cy.writefile()。
cy.writeFile("element.txt",`${elname} and its link ${href}`,{ flag: 'a+' });
或者,放弃 .each()
并改用映射函数。这样你只需要写一次。
cy.get('.s-main-slot')
.find('div>h2>a>span')
.then($cars => {
const descriptions = [...$cars].map(car => { // car is raw element
const elname = car.innerText; // use DOM property innerText
const href = car.parentElement.href; // use DOM method parentElement
return `${elname} and its link ${href}`
})
cy.writeFile('element.txt',descriptions.join('\n'))
})
或者对于更清晰的映射函数,取跨度的父级,文本仍然相同。
cy.get('.s-main-slot')
.find('div>h2>a')
.then($cars => {
const descriptions = [...$cars].map(car => {
return `${car.innerText} and its link ${car.href}`)
})
cy.writeFile('element.txt',descriptions.join('\n'))
})
或者作为对象,使用reducer来映射
cy.get('.s-main-slot')
.find('div>h2>a')
.then($cars => {
const asObject = [...$cars].reduce((obj,car) => {
obj[car.innerText] = car.href; // "Cars": "https://www.amazon.com...
return obj;
},{})
cy.writeFile("element.json",asObject)
})
,
每次找到 #include<iostream>
#include<vector>
using namespace std;
int main()
{
int s(0),values(0);
vector <int> grades;
cout << "Enter the number of grades you want to enter: \n";
cin >> s;
cout << "Enter the values:";
for (int i(0); i < s; i++)
{
cin >> values;
grades.push_back(values);
}
int grades_size(grades.size());
int average(0);
for (int m(0); m <= grades_size; m++)
{
average += grades[m];
}
average /= grades_size;
cout << "Your average is" << average;
return 0;
}
及其 car
时,您都在重写文件,因此在 href
块的顶层声明一个空的 array
& push()
将所有内容传递给它,然后将 it()
数组作为 cars
传递给 cy.writeFile
方法,如下所示:
param