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

aks*_*aks 8 java selenium selenium-webdriver

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

我的问题是:

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

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

- 谢谢

Ami*_*ith 9

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

隐式等待是指在尝试查找一个或多个元素(如果它们不是立即可用)时,WebDriver轮询DOM一段时间.

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

这可以使用显式等待来实现.

显式等待是您定义的代码,用于在进一步执行代码之前等待某个条件发生.

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

上面的代码等待30秒才能显示链接并可以点击.

请参阅此获取更多信息.


Gro*_*eek 7

你肯定可以.我们使用Selenium作为助手从网站获取一些数据.

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

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

ExplicitWait方法Amith也不错.您可以在用户点击后关注您的期望,并等到实现此条件


小智 5

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

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

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