Я сталкиваюсь с проблемой, что иногда код обещания выполняется, и некоторое время он просто пропускает его, обрабатывая обещание операторов, то есть используя оператор then, я пробовал два подхода, которые все еще имеют проблему.
несколько запутанных моментов:
- если я не буду использовать await с обещанием обработки строки кода, например с использованием затем
- , если я буду использовать ключевое слово async в функции then, такой как
Пример:
await item.element(by.css("h4 a")).getText().then(async(text)=> {
if (text == product) {
await item.element(by.css("button[class*='btn-info']")).click();
}
Рабочий результат:
Inвыше изображение результаты переменной напечатаны как 80000 и т. д.
Мой код, как показано ниже:
Первый подход:
IЯ должен заменить каждое ключевое слово функции и поставить асинхронную на толстую функцию, я также добавил ожидание везде, где это мне позволяет.также я использую await, а затем вместе
import { Given, When, Then } from "cucumber";
import { browser, element, by } from "protractor";
import { async } from "q";
import chai from "chai"
let assert = chai.assert;
async function selectItems(product) {
//take 4 cards into list
//go through each index in the list - and get the title= if title =desired title then in that index i will select add button
await element.all(by.tagName("app-card")).each(async(item) => {
await item.element(by.css("h4 a")).getText().then(async(text)=> {
if (text == product) {
await item.element(by.css("button[class*='btn-info']")).click();
}
})
})
}
Given(':I will navigate to qaacamedy site', async () => {
await browser.get("https://qaclickacademy.github.io/protocommerce/");
await console.log("browser lunched");
});
When(': click on the shop and add all products in cart', async () => {
await element(by.linkText("Shop")).click();
await selectItems("Samsung Note 8");
await selectItems("iphone X");
await element(by.partialLinkText("Checkout")).getText().then(function(text) {
let res = text.split("(");
let x = res[1].trim().charAt(0);
let y = x;
console.log(y);
assert.equal(res[1].trim().charAt(0),x);
})
});
When(': I calculate all price', async () => {
let value;
let amount=new Array() ;
let set= new Set();
await element(by.partialLinkText("Checkout")).click();
await element.all(by.css("td[class*='text-center']")).each(function(item){
item.element(by.css("strong")).getText().then(function(text) {
console.log(text);
let res =text.split('.');
value=Number(res[1].trim());
amount.push(value);
set.add(value);
console.log("my value ="+value);
console.log("my amounts"+amount);
})
})
let add=0;
// for (let i = 0; i < amount.length; i++) {
// await console.log("array value = "+amount[i]);
// add=add+amount[i];
// }
for (let num of set) {
await console.log("iterbale value of set = "+num); //1 2 3 4 5 6
add=add+num;
}
await console.log("total calculate value ="+add);
await console.log("my amounts final"+amount);
});
Then(': some should be shown', async () => {
await console.log("Then Statement");
});
Как показано в приведенном выше результате, операторы не печатаются сейчас, но иногда я получаю результаты
Второй подход:
Я попытался также использовать функцию обещания как асинхронную:
import { Given, When, Then } from "cucumber";
import { browser, element, by } from "protractor";
import { async } from "q";
import chai from "chai"
let assert = chai.assert;
async function selectItems(product) {
//take 4 cards into list
//go through each index in the list - and get the title= if title =desired title then in that index i will select add button
await element.all(by.tagName("app-card")).each(async(item) => {
await item.element(by.css("h4 a")).getText().then(async(text)=> {
if (text == product) {
await item.element(by.css("button[class*='btn-info']")).click();
}
})
})
}
Given(':I will navigate to qaacamedy site', async () => {
await browser.get("https://qaclickacademy.github.io/protocommerce/");
await console.log("browser lunched");
});
When(': click on the shop and add all products in cart', async () => {
await element(by.linkText("Shop")).click();
await selectItems("Samsung Note 8");
await selectItems("iphone X");
await element(by.partialLinkText("Checkout")).getText().then(async(text)=> {
let res = text.split("(");
let x = res[1].trim().charAt(0);
let y = x;
await console.log(y);
await assert.equal(res[1].trim().charAt(0),x);
})
});
When(': I calculate all price', async () => {
let value;
let amount=new Array() ;
let set= new Set();
await element(by.partialLinkText("Checkout")).click();
await element.all(by.css("td[class*='text-center']")).each(async(item)=>{
item.element(by.css("strong")).getText().then(async(text)=> {
await console.log(text);
let res =text.split('.');
value=Number(res[1].trim());
amount.push(value);
set.add(value);
await console.log("my value ="+value);
await console.log("my amounts"+amount);
})
})
let add=0;
// for (let i = 0; i < amount.length; i++) {
// await console.log("array value = "+amount[i]);
// add=add+amount[i];
// }
for (let num of set) {
await console.log("iterbale value of set = "+num); //1 2 3 4 5 6
add=add+num;
}
await console.log("total calculate value ="+add);
await console.log("my amounts final"+amount);
});
Then(': sum should be shown', async () => {
await console.log("Then Statement");
});
Здесь во втором подходе я также получаюта же проблема.
Также предложите, это хорошая практика для обработки функции обещания, а также ниже:
await element(by.partialLinkText("Checkout")).getText().then(async(text)=> {
В обоих вышеупомянутых подходах я использую флаг ниже:
SELENIUM_PROMISE_MANAGER: false,
Эта проблема всегда возникает, особенно если я использую режим отладки с помощью launch.json
Мой файл функций выглядит следующим образом:
Feature: I am going to validate the qaacamedy site
Scenario: practice assignment
Given :I will navigate to qaacamedy site
When : click on the shop and add all products in cart
When : I calculate all price
Then : sum should be shown
также попытался удалить пакеты async, async kit и protractor и установить их снова, как только это сработало, но через некоторое время снова начало показывать мне проблему.не понимая, почему одно и то же поведение кода по-разному, я не понимаю, какова основная причина проблемы, застревая много дней на одном и том же
Пожалуйста, обратите внимание, что последняя серьезная проблема, с которой я столкнулся с транспортиром