使用Selenium的click_and_hold方法时,究竟是什么条件或操作会导致鼠标单击释放?



我在硒测试中曾经有过几次,我决定在某些元素上使用Selenium的click_and_hold()(源代码)方法。源代码使它看起来会无限期地保持压力,但是肯定有一些操作,例如简单的单击,会导致单击释放。显然,呼叫release也将发布"持有"点击,但是是否有人可以掌握哪些操作/条件(从脚本或页面本身中)会导致单击释放?

我已经链接到Python绑定的文档,但是无论使用哪种语言来编写脚本,我认为这都是相同的。请让我知道这个假设是否不正确!

repares()

释放(on_element)释放鼠标按钮 。如果on_element None 当前鼠标位置上发行,则定义为:

def release(self, on_element=None):
    """
    Releasing a held mouse button on an element.
    :Args:
     - on_element: The element to mouse up.
       If None, releases on current mouse position.
    """
    if on_element:
            self.move_to_element(on_element)
    if self._driver.w3c:
        self.w3c_actions.pointer_action.release()
        self.w3c_actions.key_action.pause()
    else:
        self._actions.append(lambda: self._driver.execute(Command.MOUSE_UP, {}))
    return self

release()默认情况下通过ActionChains实现的不同方法调用。其中一些如下:

  • release():在元素上释放一个持有的鼠标按钮。
  • drag_and_drop(source, target):按住源元素上的左鼠标按钮,然后移动到目标元素并发布鼠标按钮。
  • drag_and_drop_by_offset(source, xoffset, yoffset):按住源元素上的左鼠标按钮,然后移动到目标偏移并发布鼠标按钮。

click_and_hold()

click_and_hold()按下元素上的左鼠标按钮。

因此,您看到了正确的情况,源代码确认它将无限期地按下它,除非通过其他方法直接调用或调用release()。但是,可以有其他操作/事件可能会导致按住左鼠标按钮隐式。这些操作/事件可以是任何HTML DOM事件的结果。HTML DOM事件允许 javaScript / ajaxCalls 在HTML文档中的元素上注册不同的事件处理程序。一些大多数遇到的事件是:

  • html dom uievent:从用户界面触发的事件属于uievent对象。
    • Onload事件:加载对象时发生onload事件。
    • onResize事件:在调整浏览器窗口大小时,发生了重大事件。
    • onscroll事件:滚动滚动滚动时发生croll事件。
  • html dom focusevent:元素获得或失去焦点时发生的事件属于焦点对象。
    • onblur事件:事件发生时,当元素失去焦点
    • 时发生
    • onfocus事件:当元素获得焦点
    • 时发生事件
    • onfocusin事件:事件发生在元素即将获得焦点
    • 时发生
    • onfocusout事件:事件发生在元素即将失去焦点
    • 时发生
  • 事件对象:DOM中的所有事件对象均基于事件对象。
    • onchange事件:当更改元素的值时,发生onchange事件。
  • html dom mouseeevent:鼠标与HTML文档相互作用时发生的事件属于MouseEvent对象。
    • onMousedown事件:当用户按下元素上的鼠标按钮时,发生onMousedown事件。
    • onmouseup事件:当用户在元素上释放鼠标按钮时,发生onMouseup事件。
  • html dom dragevent:拖动和/或删除元素时发生的事件属于dragevent对象。
    • Ondrag事件:当拖动元素或文本选择时,会发生ondrag事件。
    • ondragstart事件:当用户开始拖动元素或文本选择时,发生ondragstart事件。
  • html dom transitionEvent:CSS过渡运行时发生的事件属于TransitionEvent对象。
    • 过渡期事件:事件发生在CSS过渡完成
    • 时发生

key_up()

key_up()方法还释放修饰符键。例如:

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

这个用户酶

在实现click_and_hold()用户酶的情况下,要注意,key_down()是执行A 修改器键按的方法,并且它不释放修饰符键和后续的交互作用可以假定它被按下。请注意,修饰符键是从未隐式释放。必须调用key_up(thekey)或send_keys(keys.null)以释放修饰符。

通常任何导致鼠标向上事件的动作。

单击将调用鼠标下降事件,然后将鼠标UP事件(如代码中所示)

click_and_hold()只能执行鼠标向下零件。如果您调用触发鼠标UP事件的其他任何内容,则会释放鼠标点击。

请记住,Selenium只是将操作列表传递给使用JSON Wire协议控制浏览器的驱动程序二进制文件。您在代码中使用的命令在通过电线之前将其转换为JavaScript操作,因此控制浏览器的驱动器二进制二进制可能在原始命令被分解之前完全没有太多上下文。

最新更新