真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SeleniumJavascriptExecutor詳解

    資源推薦:

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的樂東黎族網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

    視頻資源: 軟件測(cè)試相關(guān)系列視頻

     社區(qū)資源: 自動(dòng)化測(cè)試交流群


    

    介紹

        在Selenium IDE中我們可以使用runScript命令去執(zhí)行js代碼片段,以輔助完成一些Selenium不方便達(dá)成的任務(wù),同樣,在WebDriver中我們也可以使用JavascriptExecutor工具類去完成js代碼執(zhí)行,下面我就四點(diǎn)詳細(xì)闡述該工具的使用及工作原理。

        

    本篇文章討論主題包括:

        1. JavascriptExecutor執(zhí)行js代碼的兩種方法介紹。

        2. JavascriptExecutor執(zhí)行js代碼的兩種方法使用示例。

        3. JavascriptExecutor執(zhí)行js的原理。

        4. JavascriptExecutor常用案例。

    下面我們依次對(duì)以上三個(gè)話題進(jìn)行詳細(xì)講解!

    

    1. JavascriptExecutor執(zhí)行js代碼的兩種方法介紹

        Object executeScript(String script, Object... args);

        Object executeAsyncScript(String script, Object... args);

        

        executeScript方法接收兩個(gè)參數(shù)和一個(gè)返回值:

        script,javascript代碼片段,這段js代碼片段是作為js函數(shù)的完整方法體,可以使用return語句作為函數(shù)的返回值。

        args, 參數(shù)數(shù)組,參數(shù)數(shù)組用于將外部數(shù)據(jù)傳遞給script(js代碼片段),script中可以通過arguments[index]方式索引args數(shù)組中的參數(shù);參數(shù)數(shù)據(jù)類型必須是以下幾種(number, boolean, String, WebElement, 或者以上數(shù)據(jù)類型的List集合),當(dāng)然無參數(shù)可以保留為空。

        返回值,返回值是由js代碼片段計(jì)算后通過return語句返回,返回值數(shù)據(jù)類型可以為(WebElement,Double,Long,Boolean,String,List或Map),沒有return語句,這里返回?cái)?shù)據(jù)為null。

        

        executeAsyncScript方法接收兩個(gè)參數(shù)和一個(gè)返回值:

        script,javascript代碼片段,這段js代碼片段是作為js函數(shù)的完整方法體,與executeScript主要有兩點(diǎn)不同:

            1. 此處的script必須在代碼結(jié)束時(shí)明確調(diào)用callback方法以通知webdriver該script執(zhí)行結(jié)束;該callback方法是由webdriver注入到arguments數(shù)組中最后一個(gè)元素;可以通過arguments[arguments.length-1]獲取到,且可以使用該回調(diào)函數(shù)返回計(jì)算結(jié)果(只需要將放回結(jié)果作為回調(diào)函數(shù)的參數(shù)即可)

            2. 該script執(zhí)行會(huì)有超時(shí)時(shí)間,默認(rèn)為60s,超時(shí)時(shí)間內(nèi)未調(diào)用callback方法,JavascriptExecutor會(huì)拋出Timeout異常。

        args, 規(guī)則同executeScript。

        返回值,規(guī)則同executeScript

    2. JavascriptExecutor執(zhí)行js代碼的兩種方法使用示例。

		//示例一    使用executeScript方法,在js代碼中獲取方法傳入的參數(shù)數(shù)組
		//使用arguments索引方法中傳入的參數(shù)數(shù)組,并使用return將定義的函數(shù)體計(jì)算結(jié)果返回.
		//代碼中傳入3個(gè)參數(shù),js語句中索引第二,三各參數(shù)。
		
		JavascriptExecutor jsExec = (JavascriptExecutor)driver;
		String functionBody = "return arguments[1]+','+arguments[2]";
		String returnRes = (String)jsExec.executeScript(functionBody, 1, "hello", "selenium");
		System.out.println(returnRes);
		
		
		//示例二    使用executeAsyncScript方法,在js代碼中獲取方法傳入的參數(shù)數(shù)組,并通過調(diào)用callback方法返回函數(shù)體計(jì)算結(jié)果
		//代碼中傳入3個(gè)參數(shù),js語句中索引第二,三各參數(shù)。
		
		//超時(shí)時(shí)間是為callback方法調(diào)用而設(shè)置的,超時(shí)時(shí)間內(nèi)沒有調(diào)用callback方法,默認(rèn)會(huì)再等待設(shè)定的超時(shí)間,在此沒有返回則拋出異常。
	        driver.manage().timeouts().setScriptTimeout(2, TimeUnit.SECONDS);
		
		String script = "var res = arguments[0] + ',' + arguments[1]; "
				+ "var callback = arguments[2];"
				+ "callback()";
		String returnVal = (String)driver.executeAsyncScript(script, "hello" , "selenium");
		System.out.println(">>>" + returnVal);

        3. JavascriptExecutor執(zhí)行js的原理。

        如何理解JavascriptExecutor如何運(yùn)行js代碼,需要對(duì)javascript基礎(chǔ)有一定的認(rèn)識(shí),首先給大家羅列兩個(gè)javascript中三種定義和調(diào)用函數(shù)的示例,大家看完示例就不難理解webdriver是如何去運(yùn)行javascript代碼了,同時(shí)也能消除(為何在javascript中使用arguments來接收方法傳入的參數(shù))的困惑。

    第一種函數(shù)定義方式:
    function sum(a, b) {
        return a+b;
    }
    sum(2,3);  //輸出5
    
    第二種函數(shù)定義方式:
    
    var sum = new Function('a', 'b', 'return a+b;');
    sum(2,3)  //輸出5
    
    第二種方式我們可以改寫為: 
    
    new Function('a', 'b', 'return arguments[0]+arguments[1]').apply(null,[1,2]);  //輸出5

        當(dāng)然函數(shù)的定義不限于以上三種寫法,我們這里重點(diǎn)講解第二種和第三種方法,相信大家在看到這兩種使用方式時(shí),已經(jīng)理解webdriver是如何調(diào)用js代碼了,但還會(huì)疑惑為什么會(huì)使用arguments來接收參數(shù)。

        我們所有定義的function實(shí)質(zhì)上是對(duì)Function類的實(shí)現(xiàn),而Functions類的定義中arguments作為局部變量,通過arguments索引接收所有參數(shù),即使在方法定義中未指定的參數(shù),大家來看下面的代碼示例:

    function add(a) {
        var sum =0,
        len = arguments.length;
        for(var i=0; i

        

        相信講到這里大家應(yīng)該非常清楚webdriver是如何去執(zhí)行js代碼的原理了,事實(shí)上webdriver就是通過new Function方式定義匿名函數(shù)來運(yùn)行javascript代碼的。


網(wǎng)站標(biāo)題:SeleniumJavascriptExecutor詳解
新聞來源:http://weahome.cn/article/pggcsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部