Selenium click()是人工的还是自动化的?

Selenium click()是人工的还是自动化的?,selenium,automation,click,appium,Selenium,Automation,Click,Appium,我提出问题的情景如下: 我通过正常方式输入一个网页,然后按下一个按钮,在这个网页上启动一个HTML5应用程序,这个应用程序在一个iFrame中。在应用程序启动时,系统会提示我打开或关闭声音。在这一点上,有两种可能的结果: 1。当我手动回答此提示时,应用程序窗口中会出现新按钮,与预期一样。 2。当我通过Appium自动回复此提示时,不会出现新按钮。 现在谈问题: 为了回答提示,我使用Selenium中的click()方法。这个click()是否可能不被认为是由人执行的,因此不会触发必要的事件?既然

我提出问题的情景如下:

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

1。当我手动回答此提示时,应用程序窗口中会出现新按钮,与预期一样。

2。当我通过Appium自动回复此提示时,不会出现新按钮。

现在谈问题:

为了回答提示,我使用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只是用于初始化驱动程序、设置功能等。我还尝试通过操作和JavaScript单击该元素,但行为没有改变。

在C#中,我发现一种解决方法,可以实际控制鼠标并移动鼠标/用鼠标单击,即使用“Microsoft.VisualStudio.TestTools.UITesting”用于键盘/鼠标库。从那里,你可以告诉它“鼠标。点击(新的点(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));

我从未听说过/见过
click()
根据人类或
selenium
的不同工作方式。你能添加一些代码来说明你的点击操作是如何执行的吗?一旦应用程序启动,您是否将焦点切换到新的iFrame?我要问的一件事是,它是否曾经达到
click()
操作。例如:它是否比您的等待元素可点击指令更进一步?只是随便说说,你的代码看起来不太适合这个。它应该读取
AppiumTestBase.getStandardWaitTime().until(ExpectedConditions.elementToBeClickable(soundOff))。您缺少使用
ExpectedConditions
。确定另一件需要注意的事情-您在代码中使用了
AppiumTestBase.getDriver()
两次。
WebDriver
的初始化是否完成了一次,并且两次都返回了相同的实例?还是每次都要创建一个新实例?我猜你两次都返回同一个实例,但只是试图一个接一个地排除:)老实说,我现在没有什么建议了。您正在维护一个一致的
WebDriver
实例(即仅实例化一次)。您已切换到正确的元素,您的代码正在查找该元素,它正在等待该元素可单击(并且确实正确地绕过了它),并且可以在该元素上使用
click()
方法。不得不承认——我被难住了@不用担心,我也是!:)但是谢谢你的意见。如果我找到了一个解决方案或肮脏的解决方法,我会把它贴在这里。谢谢你的回答,但我也尝试过这种方法,显然,它也不起作用。@CharlesNough我对答案不是很确定,很抱歉。我唯一能建议的另一件事是尝试一个不同的程序,比如inputsimulator:别担心,谢谢。我发现了一个非常肮脏的解决方法,仍然需要仔细研究,看看它是否真的可行。其要点是,应用程序需要一种特殊的触摸事件,而selenium/appium无法实现,至少我是这么认为的。