Как нажать кнопку несколько раз с одинаковым идентификатором элемента на одной странице - PullRequest
0 голосов
/ 23 октября 2019

выдает ошибку как

  • Ошибка: элемент не взаимодействует (информация о сеансе: chrome = 78.0.3904.70) (Информация о драйвере: chromedriver = 78.0.3904.11 (eaaae9de6b8999773fa33f92ce1e1bbe294437cf-refs / branch-головки / 3904@ {# 86}), платформа = Windows NT 10.0.17134 x86_64)

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Ответ на ваш вопрос «Как несколько раз нажать кнопку с одинаковым идентификатором элемента на одной странице»

let nextButton = element(by.id("next"));

await nextButton.click();
await nextButton.click();
await nextButton.click();

Но это не ваша проблема, и я не знаю, почему вы 'Я хочу щелкнуть по нему несколько раз, если вы не можете щелкнуть по нему ни разу, получая вышеуказанную ошибку ...

Причиной этого является либо

  • ваша кнопка не активна(серый) даже для реального пользователя
  • или вы должны использовать browser.executeScript("arguments[0].click();", nextButton.getWebElement());, который будет щелкать по нему независимо от его кликабельности

Однако, согласно вашим комментариям, это все равно не то, что вы ищетедля ... То, что вы ищете, в моем понимании, если одна и та же кнопка присутствует на нескольких страницах, как вы нажимаете ее. Ответ на этот вопрос - определить его один раз в начале, а затем щелкнуть его в любом месте приложения, пока локатор сохраняется

, поэтому вместо предположения было бы неплохо, если вы проанализируете свою проблему и дадите нам знатьтак что мы можем помочь вам

0 голосов
/ 23 октября 2019

Две вещи, которые вы можете попробовать. Во-первых, я не думаю, что .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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...