【问题标题】:Can we make selenium webdriver to wait until user clicks on a webpage link at run-time without using implicit wait?我们可以让 selenium webdriver 在运行时等待用户点击网页链接而不使用隐式等待吗?
【发布时间】:2014-01-28 22:47:07
【问题描述】:

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

我的问题是:

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

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

- 谢谢

【问题讨论】:

  • 如何设置一些 javascript 变量(将 var "userHasClicked" 设置为 true)。 2.试试这个伪代码:while (userHasClicked == false){ Thread.sleep(1000ms); }

标签: java selenium selenium-webdriver


【解决方案1】:

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.

【讨论】:

    【解决方案2】:

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

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

    我们在这里所做的,是制作一个带有输入字段的 Swing 对话框,以获取用户想要输入的内容,然后由 Selenium 执行实际的表单提交。你可以对链接做同样的事情,你可以让用户选择一个链接来点击,然后用 webdriver 执行实际的点击。

    AmithExplicitWait 方法也不错。你可以专注于用户点击后的预期,等到这个条件实现

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-11
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 2023-03-05
        相关资源
        最近更新 更多