【问题标题】:Is the Selenium click() recognized as human or automation?Selenium click() 被识别为人工还是自动化?
【发布时间】:2017-11-30 09:35:29
【问题描述】:

产生问题的场景如下:

我通过正常方式进入一个网页,然后我按下一个按钮,在这个网页上启动一个 HTML5 应用程序,这个应用程序在一个 iFrame 内。在应用程序启动时,系统会提示我打开或关闭声音。此时有两种可能的结果:

1. When I answer this prompt manually, new buttons appear in the application window, as expected.

2. When I answer this prompt through automation via Appium, new buttons do not appear.

现在问题来了:

为了回答提示,我使用 Selenium 的 click() 方法。这个 click() 是否有可能不被认为是由人执行的,因此不会触发必要的事情?而且由于我无法访问应用程序的源代码,我可以强制 Selenium click() 看起来与人工点击完全一样吗?

这是我用来执行上述点击的代码:

//Application loading up, hence the sleep
Thread.sleep(5000);
AppiumTestBase.getDriver().switchTo().frame("e_iframe");
Thread.sleep(5000);
WebElement soundOff = AppiumTestBase.getDriver().findElement(By.id("soundOff"));
AppiumTestBase.getStandardWaitTime().until(elementToBeClickable(soundOff));
soundOff.click();

程序能够找到并切换到iFrame,也不存在跨域问题。 AppiumTestBase 仅用于初始化驱动程序、设置功能等。我还尝试通过 Actions 和 JavaScript 单击元素,但行为没有变化。

【问题讨论】:

  • 我从未听说过/见过click() 的工作方式因人或selenium 而不同。您能否添加一些代码来阐明您的点击操作是如何执行的?应用程序启动后,您是否将焦点切换到新的 iFrame
  • 我要问的一件事是它是否曾经达到click() 行动。例如:它是否比您的 wait for element to be clickable 指令更进一步?顺便说一句,您的代码看起来不太合适。它应该是AppiumTestBase.getStandardWaitTime().until(ExpectedConditions.elementToBeClickable(soundOff));。您在此处缺少使用ExpectedConditions
  • 确定另一件需要注意的事情 - 您在代码中使用了两次 AppiumTestBase.getDriver()WebDriver 的初始化是否完成了一次并且两次都返回了相同的实例?还是每次都创建一个新实例?我猜你两次都返回同一个实例,但只是试图一一排除:)
  • 老实说,在这一点上我已经没有给你的建议了。您正在维护一个一致的 WebDriver 实例(即仅实例化一次)。您已切换到正确的 元素,您的代码正在查找该元素,它正在等待该元素可点击(并正确绕过它)并使用 click() 方法在元素上很好。不得不承认——我被难住了!
  • @AJC24 不用担心,我也是! :) 但感谢您的意见。如果我以某种方式找到解决方案或肮脏的解决方法,我会在这里发布。

标签: selenium automation click appium


【解决方案1】:

在 C# 中,我发现实际上控制鼠标并移动它/单击它的一种解决方法是使用“Microsoft.VisualStudio.TestTools.UITesting”作为键盘/鼠标库。从那里,您可以告诉它“Mouse.Click(new Point(X, Y));”它会将您的鼠标移动到该位置并单击。

示例代码:

using Microsoft.VisualStudio.TestTools.UITesting;

var soundOff = AppiumTestBase.getDriver().findElement(By.id("soundOff"));
Mouse.Click(new Point(soundOff.Bounds.X, soundOff.Bounds.Y));

【讨论】:

  • 感谢您的回答,但我也已经尝试过这种方法,显然它也不起作用。
  • @CharlesNough 我不太确定答案,对此感到抱歉。我唯一能建议的另一件事是尝试不同的程序,如 inputsimulator:inputsimulator.codeplex.com
  • 别担心,谢谢。我发现了一个非常肮脏的解决方法,仍然需要研究它,看看它是否真的可行。它的要点是应用程序期待一种特殊的触摸事件,selenium/appium 无法实现,至少我是这么认为的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多