我正在与:
Cypress.io和TypeScript。
我遇到了逻辑问题。
我想做什么:
几页中有元素列表。我要获取该元素列表,并检查它们是否具有某种名称,如果其中之一具有该名称,请打开它。 我遇到了这样的问题,我无法从HTML元素中获取文本。这是我的代码:
it.only('should be able to open element', function () {
cy.get('.page-number').each(function () { // Using this to get all pages
cy.get('div[class="name"] > a > u').then(elem => { //Here I get elements with job names
console.log('1 ', elem.get(0)); //RESULT: only that one element name. Example:<u _ngcontent-c10="">Element 1</u>
console.log('2 ', elem.text()); //RESULT: all elements in a page as text
const textElem = elem.get(1);
let txt = +textElem;
console.log('3 ', textElem); //RESULT: tried to convert it like this. Example:<u _ngcontent-c10="">Element 1</u>
console.log('4 ', elem.get(0).text()); //RESULT: Error Message: TS2339: Property 'text' does not exist on type 'HTMLElement'.
let i = 0;
const jobName = elem.get(i);
console.log('3 ', elem.get(i));
if({HERE I WANT TO GET ELEMENT TEXT} === 'My text'){
//TODO
}
else{
if(expect(i).to.be.oneOf([8, 16, 24])){ //one page have 8 elements
cy.get('.page-number').click({multiple : true}); //one another page with elements
cy.log('ELEMENT WAS NOT FIND IN PAGE.');
}
i++;
}
});
});
})
问题: 在这种情况下,如何获取HTMLelement文本? 还是我可能会在这方面遇到困难的逻辑?如果是,请给我一个主意,如何更好地解决它。
答案 0 :(得分:1)
我认为基本问题是.each()
迭代找到的元素列表,因此在each()
函数内部,您一次只能获得一个元素,但是内部代码使用.get()
好像elem
是元素数组。
您可能会发现使用.then(elems => {...})
更容易。
我使用数组映射使用本机textContent
(参考Node.textContent)和散布运算符将文本值的数组转换为将cy.get()
的结果转换为可使用的数组.map()
。
it('should...', () => {
...
cy.get('div[class="name"] > a > u').then(elems => {
const texts = [...elems].map(el => el.textContent.trim());
let i = 0;
if (texts[i] === 'My text') {
...
}
else {
...
}
});
另外,if(expect(i).to.be.oneOf([8, 16, 24]))
可能不是一个好主意,因为expect
有副作用。我将在其中使用一个简单的布尔表达式,例如if([8, 16, 24].includes(i))
和expect
。
答案 1 :(得分:0)
我不确定您要问什么,但是如果您只想获取元素的文本,则可以执行此操作。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
如果我误解了,请发表评论,我会尽力回答。
答案 2 :(得分:0)
要获取实际的字符串对象而不是JQuery对象,可以使用:
cy.get(myElement).then((theElement) => {
theElement.text() // this returns a string with the element's InnerHTML
});