GVKun编程网logo

Java等待HTML元素并通过WebDriverEventListener记录鼠标单击(js等待元素出现后执行)

9

对于Java等待HTML元素并通过WebDriverEventListener记录鼠标单击感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解js等待元素出现后执行,并且为您提供关于addEve

对于Java等待HTML元素并通过WebDriverEventListener记录鼠标单击感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解js等待元素出现后执行,并且为您提供关于addEventListener()与removeEventListener()、addEventListener()与removeEventListener()解析、android – ChildEventListener和ValueEventListener Firebase接口有什么区别?、android – firebase的addValueEventListener()和addListenerForSingleValueEvent()之间的区别的宝贵知识。

本文目录一览:

Java等待HTML元素并通过WebDriverEventListener记录鼠标单击(js等待元素出现后执行)

Java等待HTML元素并通过WebDriverEventListener记录鼠标单击(js等待元素出现后执行)

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

问候

答案1

小编典典

回答您的问题:

如果可以迫使应用程序等待单击
:从技术上讲,的调用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

addEventListener()与removeEventListener()

addEventListener()与removeEventListener()


addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最有这个布尔值参数是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。

要在按钮上为click事件添加事件处理程序,可以使用下列代码:

var btn = document.getElementById("myBtn");
btn.addEventListener("click",function () {
    alert(this.id);
},false);

使用DOM2级方法添加事件处理程序的主要好处是可以添加多个事件处理程序。来看下面的例子:

通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;移除时传入的参数与添加处理程序时使用的参数相同。这也意味着通过addEventListener()添加的匿名函数无法移除,如下面的例子所示:

在这个例子中,我使用addEventListener()添加一个事件处理程序。虽然调用removeEventListener(0是看似使用了相同的参数,但实际上,第二个参数与传入addEventListener()中的那一个完全不同的函数。而传入removeEventListener()中的事件处理程序函数必须与传入addEventListener()中的相同,如下面的例子所示:

var btn = document.getElementById("myBtn");
var handler = function () {
        alert(this.id);
    };
btn.addEventListener("click",handler,false);  //有效!

重写后的这个例子没有问题,是因为在addEventListener()和removeEventListener()中用来相同的函数。

大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段,这样可以最大限度地兼容各种浏览器。最好只在需要在是时间到达目标之前截获它的时候将事件处理程序添加到捕获阶段。如果不是特别需要,我们不建议在事件捕获阶段注册事件处理程序。

addEventListener()与removeEventListener()解析

addEventListener()与removeEventListener()解析

addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。 所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。

最后这个布尔值参数是true,表示在捕获阶段调用事件处理程序; 如果是false(false- 默认),表示在冒泡阶段调用事件处理程序。

addEventListener的参数一共有三个,语法为:

下面是详解: 1、其中element是要绑定函数的对象。 2、type是事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on"。 3、listener当然就是绑定的函数了,记住不要跟括号 4、最后一个参数是个布尔值,表示该事件的响应顺序,下面重点介绍一下addEventListener的第3个参数(useCapture)。

要在按钮上为click事件添加事件处理程序,可以使用下列代码:

rush:js;"> var btn = document.getElementById("myBtn"); btn.addEventListener("click",function () { alert(this.id); },false);

使用DOM2级方法添加事件处理程序的主要好处是可以添加多个事件处理程序。来看下面的例子:

rush:js;"> var btn = document.getElementById("myBtn");

btn.addEventListener("click",false);
btn.addEventListener("click",function () {
alert("Hello World");
},false);

通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;

移除时传入的参数与添加处理程序时使用的参数相同。 这也意味着通过addEventListener()添加的

匿名函数无法移除

,如下面的例子所示:

rush:js;"> var btn = document.getElementById("myBtn");

btn.addEventListener("click",function () {
alert(this.id);
},false);
btn.removeEventListener("click",function () { //无效!
alert(this.id);
},false);

在这个例子中,我使用addEventListener()添加一个事件处理程序。 虽然调用removeEventListener看似使用了相同的参数 但实际上,第二个参数与传入addEventListener()中的是完全不同的函数。 而传入removeEventListener()中的事件处理程序函数必须与传入addEventListener()中的相同,

下面的例子所示:

rush:js;"> var btn = document.getElementById("myBtn"); var handler = function () { alert(this.id); }; btn.addEventListener("click",handler,false); //有效!

重写后的这个例子没有问题,是因为在addEventListener()和removeEventListener()中用来相同的函数。 实验结果是,用户点击button时,每次都会输出"I have been clicked!",说明removeEventListener()函数没有起到作用。

通过查找资料,得出结论。在使用removeEventListener()函数时,handler函数,必须和使用addEventListener()里面的handler函数必须相同。

所以上面写的代码是错误的。修正之后的代码应该如下:

rush:js;"> //addEventListener()和removeEventListener()中handler函数必须相同,移除事件函数才有效。 function myhandler(){ console.log("I have been clicked!"); document.getElementById('info').removeEventListener('click',myhandler,false); } var target=document.getElementById('info'); target.addEventListener("click",false); target.removeEventListener("click",false); //有效!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小编。

android – ChildEventListener和ValueEventListener Firebase接口有什么区别?

android – ChildEventListener和ValueEventListener Firebase接口有什么区别?

文档说他们都在Firebase数据库位置收听更改.

解决方法:

虽然ChildEventListener有时可以更灵活,但它们几乎完全相同:使用ChildEventListener,您可以为4个操作指定不同的行为(onChildAdded,onChildChanged,onChildMoved和onChildRemoved),而ValueEventListener仅提供onDataChanged.

ChildEventListener还在子位置提供DataSnapshots(数据的不可变副本),而ValueEventListener提供整个节点的DataSnapshot.

android – firebase的addValueEventListener()和addListenerForSingleValueEvent()之间的区别

android – firebase的addValueEventListener()和addListenerForSingleValueEvent()之间的区别

正如标题所说,我想知道firebase的addValueEventListener()和addListenerForSingleValueEvent()之间的区别.

解决方法:

addValueEventListener()继续监听它所附加的查询或数据库引用.

但是addListenerForSingleValueEvent()会立即执行onDataChange方法,并且在执行该方法一次后,它会停止侦听它所附加的引用位置.

我们今天的关于Java等待HTML元素并通过WebDriverEventListener记录鼠标单击js等待元素出现后执行的分享就到这里,谢谢您的阅读,如果想了解更多关于addEventListener()与removeEventListener()、addEventListener()与removeEventListener()解析、android – ChildEventListener和ValueEventListener Firebase接口有什么区别?、android – firebase的addValueEventListener()和addListenerForSingleValueEvent()之间的区别的相关信息,可以在本站进行搜索。

本文标签:

上一篇org.openqa.selenium.SessionNotCreatedException:未创建会话:此版本的ChromeDriver仅支持使用Selenium的Chrome版本75

下一篇selenium网格:MaxSessions与MaxInstances(selenium network)