Protractor 一次点击vs两次点击

Protractor 一次点击vs两次点击,protractor,Protractor,情景: 使用量角器测试web应用程序 需要单击元素以打开另一个页面 将测试设计为在元素上单击一次 问题: 有时元素需要单击一次,测试就通过了,但是如果我再次运行它,同样的元素需要双击 这导致我的测试随机失败 我通过将命令更改为在量角器中双击来验证这一点,并将其传递 这导致了不一致性,因为我不知道该元素何时需要单击一次或双击 有什么建议吗 您可能只需要通过mouseMove()显式地将元素置于焦点,然后发出click()操作: browser.actions().mouseMove(elm).

情景:

  • 使用量角器测试web应用程序
  • 需要单击元素以打开另一个页面
  • 将测试设计为在元素上单击一次
问题: 有时元素需要单击一次,测试就通过了,但是如果我再次运行它,同样的元素需要双击

这导致我的测试随机失败

我通过将命令更改为在量角器中双击来验证这一点,并将其传递

这导致了不一致性,因为我不知道该元素何时需要单击一次或双击


有什么建议吗

您可能只需要通过
mouseMove()
显式地将元素置于焦点,然后发出
click()
操作:

browser.actions().mouseMove(elm).click().perform();

您可能只需要通过
mouseMove()
显式地将元素置于焦点,然后发出
click()
操作:

browser.actions().mouseMove(elm).click().perform();

不一致可能是因为元素尚未准备好单击。所以你们需要等到元素变成可点击的,然后点击它。下面的代码将帮助您实现一致性

 Code Snippet:

  var EC = protractor.ExpectedConditions;
  var elementToBeClick=element(locator);
  var timeOut=10000;

  browser.wait(EC.elementToBeClickable(elementToBeClick), timeOut).
      thenCatch(function () {
                assert.fail(' target element is not clickable');
             });
  elementToBeClick.click();

不一致可能是因为元素尚未准备好单击。所以你们需要等到元素变成可点击的,然后点击它。下面的代码将帮助您实现一致性

 Code Snippet:

  var EC = protractor.ExpectedConditions;
  var elementToBeClick=element(locator);
  var timeOut=10000;

  browser.wait(EC.elementToBeClickable(elementToBeClick), timeOut).
      thenCatch(function () {
                assert.fail(' target element is not clickable');
             });
  elementToBeClick.click();

您可以使用browser.executeScripts将本机javascript代码注入浏览器,然后单击所需按钮。这将对传递到函数中的所需元素执行click事件

试试下面的代码

var elementToBeClick=element(locator);
browser.executeScript("arguments[0].click()",elementToBeClick.getWebElement())

您可以使用browser.executeScripts将本机javascript代码注入浏览器,然后单击所需按钮。这将对传递到函数中的所需元素执行click事件

试试下面的代码

var elementToBeClick=element(locator);
browser.executeScript("arguments[0].click()",elementToBeClick.getWebElement())

@alecxe:我们一直都是这样做的,现在仍然是这样problem@Kevin好的,您可以引入一个并这样做:
browser.actions().mouseMove(elm).sleep(50).单击().perform()。当然,这并不理想,但看看它是否真的有用。@alecxe:这就是我们一直在做的事情,现在仍然如此problem@Kevin好的,您可以引入一个并这样做:
browser.actions().mouseMove(elm).sleep(50).单击().perform()。当然,这并不理想,但看看它是否真的有用。请注意,它与常规单击不同:。我同意。但在某些情况下,用户可以单击按钮,但selenium不能。这些情况可以使用本机单击事件处理注意,它与常规单击不同:。我同意。但在某些情况下,用户可以单击按钮,但selenium不能。这些情况可以使用本机单击事件处理