#protractor #gulp-protractor
Вопрос:
Я новичок в транспортире. Здесь основная цель использования функции обратного вызова-вызвать поле ввода до dropDwn.So, Я попробовал использовать этот вызов. перед обратным вызовом я попытался использовать setTimeout ,sleep, но они выдают ошибку перехвата щелчка.
И может ли кто-нибудь подсказать мне, как вызывать несколько функций одну за другой.
inputFeild = (empId: number, callback: any) =gt; { let input = element(by.css('input#employeeid')); browser.sleep(1000); input.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, 'a')); browser.sleep(2000); input.sendKeys(empId); browser.sleep(20000); callback(); } dropDwnField = (propId: any) =gt; { let drpDwn = element(by.xpath("//b[text()='Assigned Proposals:']//parent::div//following-sibling::p-dropdown")); drpDwn.click(); setTimeout(() =gt; { let search = element(by.xpath("//input[contains(@class,'p-dropdown-filter p-inputtext ')]")); browser.sleep(2000); search.click(); search.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, 'a')); browser.sleep(2000); search.sendKeys(propId); browser.sleep(4000); element(by.xpath("//span[text()='" propId "']")).click(); }, 5000); }
файл спецификации
it(' callback function** ', async () =gt; { epatRateIntlPagePo.inputFeild(5001096, epatRateIntlPagePo.dropDwnField("13227300 - OAQ DALLAS")); //await epatRateIntlPagePo.empIDTransferPnL(5001096); await browser.sleep(3000);
Ошибка
Ошибка типа: обратный вызов не является функцией
Ответ №1:
Я думаю, что могут отсутствовать некоторые вещи, например, как эти функции импортируются и экспортируются.
Например, если это находится в файле foo.ts. Возможно, есть некоторые проблемы с функциями async / await. Я обновил некоторые из них, чтобы они имели асинхронное ожидание, чтобы функции объекта вашей страницы были асинхронными / ожидающими. Также я прокомментировал предложения по разделу setTimeout. Есть улучшения, которые можно было бы сделать, например, подождать, чтобы посмотреть, сможете ли вы взаимодействовать с элементом вместо того, чтобы просто спать:
import {browser, by, element} from 'protractor'; class EpatRateIntlPagePo { inputFeild = async (empId: number) =gt; { let input = element(by.css('input#employeeid')); await browser.sleep(1000); await input.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, 'a')); await browser.sleep(2000); await input.sendKeys(empId); await browser.sleep(20000); // callback(); what is callback? maybe delete this. } dropDwnField = async (propId: any) =gt; { let drpDwn = element(by.xpath("//b[text()='Assigned Proposals:']//parent::div//following-sibling::p-dropdown")); await drpDwn.click(); // instead of setTimeout, it is preferred to await on the browser to complete. Just remember that everything in browser.wait should be completed. await browser.wait(async () =gt; { let search = element(by.xpath("//input[contains(@class,'p-dropdown-filter p-inputtext ')]")); // instead of this use browser.wait to see if search is in the DOM await browser.sleep(2000); await search.click(); await search.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, 'a')); await browser.sleep(2000); // instead of this use browser.wait to see if search is in the DOM await search.sendKeys(propId); await browser.sleep(4000); await element(by.xpath("//span[text()='" propId "']")).click(); }, 5000); // this time period might need to be greater since 2 2 4=8 seconds of browser sleep gt; 5 seconds. }
В вашем файле спецификаций (импортируйте foo.ts, предполагая, что они находятся в одном каталоге):
import {EpatRateIntlPagePo} from './foo'; import {browser} from 'protractor'; const epatRateIntlPagePo = new EpatRateIntlPagePo(); it(' callback function** ', async () =gt; { await epatRateIntlPagePo.inputFeild(5001096); await epatRateIntlPagePo.dropDwnField("13227300 - OAQ DALLAS")); //await epatRateIntlPagePo.empIDTransferPnL(5001096); await browser.sleep(3000);
Надеюсь, это поможет. Счастливого тестирования.