【发布时间】:2019-04-19 09:55:00
【问题描述】:
我有一个电子商务网站,其中包含与亚马逊类似的产品列表。我正在尝试寻找一个元素并单击它。我已经尝试过过滤器和地图,但都不适用于我。请帮忙。
以下是每个产品的代码:
<b class="productNameHover pcursor word-break">product1</b>
<b class="productNameHover pcursor word-break">product2</b>
<b class="productNameHover pcursor word-break">product3</b>
<b class="productNameHover pcursor word-break">product4</b>
假设我的页面中有 4 个元素。所以,我试图让计数和它为我工作。
var products = element.all(by.className('productNameHover')) ; 期望(products.count()).toBe(4);
当我尝试过滤时,
解决方案 A) 不起作用,没有错误消息但什么也没做
var products = element.all(by.className('productNameHover'));
products.filter(function(elem) {
return products.getText().then(function(text) {
return text === 'product4';
});
}).click();
browser.sleep(5000);
解决方案 B) 不起作用;索引超出范围;尝试访问 index: 0 处的元素,但只有 0 个元素与定位器匹配
var products = element.all(by.className('productNameHover'));
products.filter(function(elem) {
return products.getText().then(function(text) {
return text === 'product4';
});
}).first().click();
browser.sleep(5000);
Solution C)没有错误信息但什么也没做
var products = element.all(by.className('productNameHover'));
products.filter(function(elem) {
return products
.element(by.xpath(
"//div[@class='item text-center slide-image-content active']/img"
))
.getText()
.then(function(text) {
expect(text).toContain(product4);
})
.then(function(filteredElements) {
filteredElements.first().click();
});
});
browser.sleep(5000);
解决方案 D) 这很有效,并为我提供了所有产品;但我需要单击单个产品或循环浏览
var products = element.all(by.className('productNameHover'));
products.map(function(item) {
return item.getText();
}).then(function(txt) {
console.log(txt);
//expect(txt).toContain("product 4")
});
解决方案 E) 不起作用且没有错误消息
products.map(function(item) {
return item.getText();
}).then(function(txt) {
console.log(txt);
if( txt== 'product4') {
console.log(item);
item.click();
browser.sleep(5000);
}
});
解决方案 F) 我尝试点击循环中的所有元素,但它点击的是第一个元素而不是第二个元素;它给出 Failed: stale element reference: element is not attach to the page document.
products.map(function(item) {
browser.sleep(5000);
item.click();
browser.sleep(5000);
var backButton = element.all(by.className('btn btn-outline btn-big mt-3 ml-0 ml-sm-2')).first() ;
backButton.click();
browser.sleep(5000);
})
【问题讨论】:
标签: loops dictionary filter protractor