我们可以让selenium webdriver等到用户在运行时点击网页链接而不使用隐式等待吗?

时间:2014-01-10 04:31:34

标签: java selenium selenium-webdriver

我正在使用带有java的Firefox驱动程序并试图从网站上抓取一些数据。其中涉及人工交互,我必须要求用户输入搜索字符串。然后用户必须通过用人眼分析来选择打开哪个搜索结果。我们的努力只是通过脚本让一些零碎的工作更快。

我的问题是:

我们可以让selenium webdriver等到用户在运行时点击网页链接而不使用隐式等待吗?我不能使用隐式等待,因为点击的时间可能从几秒到几分钟不等。

我是java和selenium的新手。非常感谢您的帮助。

- 感谢

3 个答案:

答案 0 :(得分:8)

Selenium webdriver是一种用于在基于Web的应用程序上自动化测试的工具,这意味着即使人工交互也是自动化的。

  

隐式等待是告诉WebDriver在尝试查找一个或多个元素时,如果它们不能立即可用,则会在一定时间内轮询DOM。

这意味着,您无法使用它来等待人工交互。但您可以假设用户正在等待某些链接出现并调用click()。

这可以使用Explicit wait来实现。

  

显式等待是您定义的代码,用于在继续进行代码之前等待某个条件发生。

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("some_link")));
element.click();

上述代码等待30秒才能显示链接并可点击。

Refer this for more info

答案 1 :(得分:6)

当然可以。我们使用Selenium作为助手从网站获取一些数据。

如果您的流程涉及多个步骤,包括打开网站,登录,选择54个参数,只需要1个人工交互(例如解析验证码),Selenium可以自动完成这些无聊的任务,让用户专注于这很重要。

我们在这里做的是使用输入字段创建一个Swing对话框以获取用户想要输入的内容,然后由Selenium执行实际的表单提交。您可以使用链接执行相同的操作,并且可以要求用户选择要单击的链接,并使用webdriver执行实际的单击。

ExplicitWait的{​​{1}}方法也很好。您可以专注于用户点击后的期望,并等到实现此条件

答案 2 :(得分:0)

我遇到了一个类似的问题,该程序需要暂停一半,以便人类用户手动输入一些2步验证信息。你可以做的是在人类步骤中显示一个消息框。我在Python中工作,这就是我的代码:

from tkinter import messagebox
messagebox.showinfo(title='2-step verification', message='Finish on screen 2-step verification, and then click OK.')

用户完成人为步骤后,他/她可以单击“确定”,程序的其余部分将会运行。