在什么时候才会用到fireEvent方法呢?

本文详细介绍了IE浏览器中特有的fireEvent方法,解释了如何利用此方法模拟用户触发的事件,如点击或悬停,并通过示例展示了其在复杂事件处理场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在DHTML开发中,微软在其DOM中为每个元素实现了一个fireEvent方法。我们知道HTML的事件onXXX可以由系统(IE环境)来管理和触 发,也可以直接执行事件的handler,比如onclick,如果被赋予事件处理函数,我们可以用element.onclick()来执行事件处理函 数。那么fireEvent用来干嘛呢?

    在MSDN中fireEvent的描述很简单:Fires a specified event on the object.
    bFired = object.fireEvent(sEvent [, oEventObject])

    并且MSDN给出了一个使用fireEvent的示例:


<HTML>
    <HEAD>
        <SCRIPT>
        function fnFireEvents()
        {
            div.innerText = "The cursor has moved over me!";
            btn.fireEvent("onclick");
        }
        </SCRIPT>
    </HEAD>
    <BODY>
        <h1>Using the fireEvent method</h1>
        By moving the cursor over the DIV below, the button is clicked.
        <DIV ID="div" onmouseover="fnFireEvents();">
            Mouse over this!
        </DIV>
        <BUTTON ID="btn" ONCLICK="this.innerText='I have been clicked!'">Button</BUTTON>
    </BODY>
</HTML>


    这 个示例非常的简单,也完全说明了fireEvent的用法。不过这个示例有一点误导我们,从而让我们不容易发现frieEvent更有价值的使用方法。由 于button的onclick事件被赋予语句:this.innerText = 'I have been clicked!',这里很容易误导我们,fireEvent产生的是执行了btn.onclick()的效果。嗯,确实是这个效果,但是意义却完全不 同,btn.onclick()只是一个函数调用,它的执行必须依赖于用户对其赋值,否则btn.onclick为null,是不能执行 btn.onclick()的。而fireEvent('onclick')的效果,"等同于"鼠标在button元素上进行了点击。

    由 于IE的事件处理是bubble up方式,fireEvent(sEvent)就显得更加的有意义了,如果我们在一个table元素<table>中监听事件,比如 onclick,当点击不同的td做出不同的响应时。如果使用程序来模拟,只能使用fireEvent这种方式,示例如下:


<table border="1" onclick="alert(event.srcElement.innerText);">
    <tr>
        <td id="abc">abc</td>
        <td id="def">def</td>
    </tr>
</table>
<button onclick="abc.fireEvent('onclick')">
    abc</button>
<button onclick="def.fireEvent('onclick')">
    def</button>

    使用abc.onclick()和def.onclick()将得到"Object doesn't support this property or method"异常。



    


abc

def


    abc def

    知 道了fireEvent的用法,那么我们用它来做什么呢?在开发具有复杂事件处理动作组件时。有时我们需要从程序中去触发一个本身因该鼠标或键盘触发的事 件,比如在TreeView控件中,我们一般是使用鼠标点击来Expand&Collapse一个结点,如果我们要用程序代码来实现这个操作怎么 办呢?当然直接执行事件处理函数是可以的,不过如果事件处理函数依赖于event变量中的状态值,那么就必须使用fireEvent方法。

    原来我曾经说过,因该把事件处理的函数封装起来,便于直接调用。比如上面说到的TreeView节点的Expand和Collapse,我在TreeView控件中都是把它们封装成两个函数Expand和Collapse,在节点被点击时,执行:


OpIcon.onclick = function()
{
     var objNode = this.Object;
     if ( objNode.m_IsExpanded )
         objNode.Collapse();
     else
         objNode.Expaned();
}

    这样一来,在程序中控制Expand和Collapse也就是分别执行函数而已。不过后来发现既然DOM中有fireEvent方法,似乎我在"动态载入数据的无刷新TreeView控件(4)"中的某些想法也不是很必要了。
<think>好的,用户现在想了解软件测试中测试用例设计的常用方法。首先,我需要回顾之前的对话,确保这次回答符合用户的要求。用户在上一个问题中询问了软件测试的具体流程,我详细分成了七个阶段,其中测试设计与开发阶段提到了等价类划分、边界值分析等方法,并生成了相关问题,包括测试用例设计的常用方法。现在用户正是针对这个问题提问,所以需要详细展开。 根据用户提供的引用内容,引用1提到了测试用例的基本概念和设计思路,包括功能、性能、界面、兼容、易用、安全等方面。引用2介绍了正交表法,引用3和4提到了错误推断法和流程分析法,引用5详细说明了等价类划分法。需要将这些方法整合起来,确保覆盖用户所需的所有常用方法。 接下来要确定回答的结构。用户希望了解常用方法,所以需要分点说明,每个方法包括定义、应用场景和例子。同时,需要引用用户提供的引用资料中的信息,正确标注引用标识。例如,等价类划分在引用5中有详细说明,正交表法在引用2,错误推断法在引用4等。 需要注意的是,用户之前的问题回答中已经提到了等价类划分和边界值分析,所以在这次回答中需要详细展开这些方法,并补充其他方法如正交实验法、场景设计法、错误推测法等。同时,要确保每个方法都有对应的引用标注,并且例子部分使用行内数学公式,如边界值的例子可能需要用到$符号。 还要检查是否遗漏了用户提供的引用中的其他方法,例如引用1提到的万能公式中的兼容性、易用性等,可能需要结合到各个方法的应用场景中,者作为测试用例设计的考虑因素。此外,回答的结构要清晰,帮助用户逐步理解每个方法的用途和实际应用。 最后,生成相关问题时要参考之前的回答,确保问题具有连贯性,比如关于如何选择合适的方法者在不同场景下的应用比较。同时,要遵循用户的要求,使用中文回答,正确应用LaTeX格式,并添加引用标识。</think>软件测试中测试用例设计的常用方法可分为以下七类,涵盖功能验证、边界探索、组合优化等多个维度: ### 一、等价类划分法 **定义**:将输入域划分为有效/无效等价类,选取代表值进行测试。例如: - 有效等价类:$1 \leq x \leq 100$ 时取$x=50$ - 无效等价类:$x<1$ 时取$x=-5$[^5] **应用场景**:表单输入验证、数值范围检测 ### 二、边界值分析法 **定义**:针对输入域边界值设计测试用例 **公式**:若输入域为$[a,b]$,测试点应包含$a-1, a, a+1, b-1, b, b+1$ **案例**:验证年龄输入框范围$[18,60]$时,测试17/18/19/59/60/61[^5] ### 三、正交实验法 **定义**:通过正交表减少测试用例数量 **参数模型**: $$L_n(m^k)$$ 其中$k$为参数个数,$m$为参数取值水平,$n$为最小用例数[^2] **案例**:浏览器兼容性测试时,组合操作系统(Win/Mac)、浏览器(Chrome/Firefox)、分辨率(1080P/4K) ### 四、场景设计法 **定义**:基于用户操作流程构建测试场景 **典型结构**: ``` 基本流:A→B→C→D 备选流1:A→B→X 备选流2:C→异常处理 ``` **应用**:电商订单流程测试[^4] ### 五、错误推测法 **定义**:依据经验推测易错点 **常见方向**: - 空值提交(如未上传附件点击提交) - 极端并发(瞬间$10^4$次请求) - 异常中断(支付过程断网)[^4] ### 六、判定表法 **定义**:通过条件组合设计用例 **四要素结构**: | 条件桩 | 动作桩 | |--------|--------| | 条件项 | 动作项 | **案例**:登录功能测试时组合用户名正确性、密码正确性、验证码状态 ### 七、状态迁移法 **定义**:基于系统状态变化设计用例 **模型**: $$S_i \xrightarrow{Event/Action} S_j$$ **应用**:订单状态机测试(待支付→已支付→发货中→已完成) ### 方法选择策略 $$测试效率 = \frac{缺陷发现数}{执行用例数} \times 100\%$$ 根据项目阶段动态调整方法组合,例如: - 迭代初期:错误推测法+等价类划分 - 系统测试:正交实验法+场景设计法 - 回归测试:边界值分析+判定表法[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值