【发布时间】: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