【问题标题】:Protractor looping of value in sendKeys(index)sendKeys(index) 中值的量角器循环
【发布时间】:2023-03-07 04:46:02
【问题描述】:

如何在循环中向sendKeys(value) 发送值?

我尝试了不同的选项来弄清楚它,但没有运气。

Numbers.ts

export const Numbers = {
 1: '777',
 2: '777',
 3: '777'
};

Texts.ts

export const Texts = {
  1: '111',
  2: '222',
  3: '333'
};

代码.ts

public async readFromFile(): Promise<void> {
  const numbers: object = Numbers;
  const texts: object = Texts;

  function* generatorNumbersAndTexts(objectNumbers, objectTexts) {
    let i: string;
    let j: string;

    for (i in objectNumbers) {
      for (j in objectTexts) {
        if (objectNumbers.hasOwnProperty(i) &&   objectTexts.hasOwnProperty(j)) {
          yield i;
          yield j;
        }
      }
    }
  }

  for (let indexI of generatorNumbersAndTexts(numbers, texts)) {
    for (let indexJ of generatorNumbersAndTexts(numbers, texts)) {
      texts.hasOwnProperty(indexJ)) {
      await this.clickSendMessage();
      try {
        await this.typeContacts(numbers[indexI]);
      } catch (e) {
        throw new Error(`There is no phone field ${e}`);
      }
      await this.typeMessage(texts[indexJ]);
      await this.sendMessage();
    }
   }
  }

方法

这些是在 readFromFile 方法中使用的方法。

public async typeContacts(numbers: string): Promise<void> {
  await this.contactField.sendKeys(numbers + ';');
}

public async typeMessage(text: string): Promise<void> {
  await this.messageField.type(text);
}

public async type(text: string): Promise<void> {
  await this.clearInput();
  await this.sendKeys(text);
}

看来这可能是 Protractor 承诺的问题。

【问题讨论】:

  • 你在哪个元素上执行sendkeys()this.sendKeys(text); sendKeys 必须有一个元素才能执行操作
  • @BenMohorc this.contactField = new Fragment($('div &gt; input[aria-owns="contact-list"]'));

标签: javascript typescript asynchronous protractor


【解决方案1】:

这是量角器的问题。这是一个解决方案:

public async fromJSON(): Promise<void> {
  for (const key in Numbers) {
    if (Numbers.hasOwnProperty(key)) {
      for (const text in Texts) {
        if (Texts.hasOwnProperty(text)) {
          await this.screenshot(`./screens/1${key}.png`);
          await this.clickSendMessage();
          await this.screenshot(`./screens/2${key}.png`);
          await this.typeContacts(Numbers[key.toString()]);
          await this.typeMessage(Texts[text.toString()]);
        }
      }
    }
  }
}

【讨论】:

    【解决方案2】:

    如果不查看您引用的功能,很难给出完整的答案。但是,可以在循环对象时使用sendKeys()
    使用带有循环的 sendKeys():

    it('Should show a loop',async()=>{
      let elem = $(''); //Input value of element you are sending key to
      let values = {1:'111',2:'222',3:'333'} //test values
      for(let key in values){
        await elem.sendKeys(values[key]);
      }
    }
    

    这个例子将111222333发送到elem

    【讨论】:

    • clickSendMessage 方法 public async clickSendMessage(): Promise&lt;void&gt; { await browser.wait(ExpectedConditions.visibilityOf(this.sendMessageButton)); await browser.actions().mouseMove(this.sendMessageButton).click().perform(); await this.sendMessageButton.click(); }.
    • 这个实现只返回来自对象的第一个值——在我的例子中是 111
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多