когда я использую обратные вызовы ,это означает, что обратный вызов не является функцией в транспортире

#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);  

Надеюсь, это поможет. Счастливого тестирования.