【问题标题】:How to click a button multilple times with the same element id in the same page如何在同一页面中多次单击具有相同元素ID的按钮
【发布时间】:2020-02-19 07:23:43
【问题描述】:

给出一个错误

  • 失败:元素不可交互 (会话信息:chrome=78.0.3904.70) (驱动信息:chromedriver=78.0.3904.11 (eaaae9de6b8999773fa33f92ce1e1bbe294437cf-refs/branch-heads/3904@{#86}),platform=Windows NT 10.0.17134 x86_64)

【问题讨论】:

  • 你需要更好地解释你在问什么,然后格式化你的代码!
  • 写一个函数并再次点击那里的按钮
  • 为什么要多次点击?打开页面时是否禁用(不可点击)?

标签: jquery html protractor


【解决方案1】:

您可以尝试两件事。首先,我不认为.click()ElementArrayFinder 对象的选项。这就是您使用element.all() 时得到的结果。您需要从列表中获取特定按钮才能单击。您可以使用.first().last().get(index) 来完成此操作。第一个和最后一个非常不言自明。假设您有 4 个这样的按钮,并且您想点击第三个,那就是:

element.all(by.id('next')).get(2).click();

我从您的 cmets 了解到,您在多个页面上都有一个下一步按钮。如果每个页面上只有一个按钮,您很可能只使用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();

【讨论】:

    【解决方案2】:

    回答您的问题“如何在同一页面中多次单击具有相同元素 id 的按钮”

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

    但这不是你的问题,我不知道你为什么要多次点击它,如果你连一次都不能点击,得到上面的错误......

    原因是

    • 即使是真实用户,您的按钮也无法点击(灰显)
    • 或者你应该使用browser.executeScript("arguments[0].click();", nextButton.getWebElement());,不管它的可点击性如何,它都会点击它

    但是,根据您的 cmets,它仍然不是您要寻找的...根据我的理解,您要寻找的是,如果同一个按钮出现在多个页面中,您如何单击它。对此的答案是在开始时定义一次,然后在应用程序中的任意位置单击它,只要定位器仍然存在

    所以不要猜测,如果您分析您的问题并告诉我们,这样我们可以帮助您

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 2019-12-02
      • 2014-10-26
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      相关资源
      最近更新 更多