当前位置: 首页 > 面试题库 >

Java等待HTML元素并通过WebDriverEventListener记录鼠标单击

萧明贤
2023-03-14
问题内容

我正在开发一个Java应用程序来帮助构建硒测试,并且我想知道是否有可能强制该应用程序等待单击,然后在单击之后确定单击了html的哪个元素。

问候


问题答案:

回答您的问题:

如果可以迫使应用程序等待单击
:从技术上讲,的调用click()由最终用户控制,该最终用户还是脚本/程序的所有者。同样,在功能上,您的脚本/程序无需等待,click()但需要等待预期的
WebElement交互 (即, clickable )。与该用例相似,在自动化测试用例时,您可能必须将快速移动的 WebDriver
实例与滞后的 Web Client 进行同步。为了实现这一目标, Selenium 为您提供了WebDriverWait

该类 可以与ExpectedConditions

一起使用 __。


预期条件

ExpectedConditions

使我们能够遵守许多条件。几个最广泛使用的 ExpectedConditions 如下:

  • presentOfElementLocated(按定位器)
  • visibleOfElementLocated(按定位器)
  • elementToBeClickable(按定位器)
  • frameToBeAvailableAndSwitchToIt(通过定位符)
  • numberOfwindowsToBe(int ExpectedNumberOfWindows)

单击该按钮后,确定单击了html的哪个元素
:为此,您必须借助EventFiringWebDriver,它将注册一个
EventHandler
实例,该实例将实现WebDriverEventListener

EventFiringWebDriver

EventFiringWebDriver是任意
WebDriver 实例的包装,该实例主要用于记录目的,支持注册WebDriverEventListener。

  • EventFiringWebDriver 程序的示例:
    EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
    

    EventHandler handler = new EventHandler();
    eventDriver.register(handler);
    eventDriver.get("https://google.com”);
    System.out.println(eventDriver.getTitle());

事件处理程序

  • EventHandler 类的示例:
     public class EventHandler implements WebDriverEventListener
    

    {
    @Override
    public void afterNavigateTo(String arg0, WebDriver arg1) {
    System.out.println(“Inside the afterNavigateTo to ” + arg0);
    }

    @Override
    public void beforeNavigateTo(String arg0, WebDriver arg1) {
        System.out.println("Just before beforeNavigateTo " + arg0);
    }
    

    }

控制台输出:

Just before beforeNavigateTo https://google.com
Inside the afterNavigateTo to https://google.com
Google


 类似资料:
  • 我正在实现一个游戏,我想让玩家点击一个特定的视图。 我希望我的控制线程等到我得到一个值回来(我已经单击了视图并处理了结果)。目前,我正在通过创建一个线程、运行一个要求它们单击的方法来执行此操作,然后进入一个当鼠标单击事件更改在time循环中使用的变量时终止的time循环。 我正在写一个游戏,其中我有一个线程不断接收事件。对于一个特定事件,我想提示用户做出响应,但要做到这一点,我需要使用JavaFX

  • 我正试图从网站上获取预订数据。进入现场后,我必须: 将默认日期范围(起初,网站显示默认日期范围的预订数据)更改为我想要搜索的日期范围 点击刷新按钮 等待网站更新页面上显示的结果。 使用Selenium、Python和BeautifulSoup,当我执行Selenium命令更新日期范围的字段并单击“刷新”按钮时,当代码到达我使用BeautifulSoup提取HTML数据的行时,将提取默认网站日期范围

  • 我不完全理解和()是如何工作的,因此我不得不将尝试缩减到以下代码部分。 main.java: runner.java: 当前,我在调用时得到一个非法MonitorStateException,但我不明白为什么。从我所看到的情况来看,我需要同步,但在这样做的时候,我假设它只会通知一个线程,而我的想法是通知所有线程。 我已经查看了,但是我找不到合适的替换(也许我只是遗漏了一些东西)。

  • 我初始化了一些元素,但不是我的锚窗格: 但是当我尝试单击MenuBar或List View时,它不起作用。例如,在这种情况下,我可以单击按钮(可能),因为它是我在AnchorPane构造函数中初始化的最后一个元素。我不能使用BorderPane或任何其他布局,因此我需要找到具有此配置的解决方案。这些是我的fxml文件: list.fxml 菜单栏。fxml rea.fxml 按钮fxml text

  • 问题内容: 我正在寻找类似于在单击元素之前检查元素是否已显示的内容。我认为可以通过完成此操作,因此我使用了以下方法: 然后点击 不幸的是,有时它等待元素,有时不等待。我寻找了一段时间,找到了这个解决方案: 它等待一切正常,但是在超时之前必须等待10次5、50秒。有点多。因此,我将隐式等待时间设置为1秒,直到现在一切都还不错。因为现在有些事情在超时前等待10秒,而另一些事情在1秒之后超时。 如何覆盖

  • 它一直在等待,但在超时之前,它必须等待10乘以5,50秒。有点多。所以我将隐含的等待设置为1秒,直到现在看起来一切都很好。因为现在有些事情在超时前等待10秒,但有些事情在1秒后超时。 如何在代码中覆盖等待元素的存在/可见性?任何暗示都是可以察觉的。