Две вещи, которые вы можете попробовать. Во-первых, я не думаю, что .click()
- это опция для ElementArrayFinder
объектов. Это то, что вы получаете, когда используете element.all()
. Вы должны получить определенную кнопку из списка, чтобы нажать на нее. Для этого вы можете использовать .first()
, .last()
или .get(index)
. Первое и последнее довольно понятны. Допустим, у вас есть 4 из этих кнопок, и вы хотите нажать на третью, это будет:
element.all(by.id('next')).get(2).click();
Я понимаю из ваших комментариев, что у вас есть следующая кнопка на нескольких страницах. Если на каждой странице есть только одна кнопка, вы, скорее всего, можете обойтись, просто используя element(by.id('next'))
вместо element.all()
. Если все другие кнопки «Далее» все еще присутствуют в DOM при переходе на новую страницу, вам не нужно использовать element.all()
.
Второй вариант - добавить функцию, которая использует ExpectedCondition.elementToBeClickable()
идождитесь нажатия кнопки, прежде чем пытаться нажать на нее.
public EC = ExpectedConditions;
public async waitForElementToBeClickable(element: ElementFinder): Promise<void> {
await browser.wait(this.EC.elementToBeClickable(element), this.wait);
}
Везде, где вы хотите нажать на кнопку, вы просто сделаете это так:
const nextButtons = element.all(by.id('next'));
await waitForElementToBeClickable(nextButtons.first());
await nextButtons.first().click();