使用自動(dòng)化腳本發(fā)表帶有圖片附件的帖子

另一種思路(針對(duì)swfupload上傳插件)

1户侥、使用httpclient上傳附件
2、調(diào)用JS腳本,往表單里面添加跟附件有關(guān)的輸入項(xiàng)


image.png

設(shè)計(jì)上傳圖片的腳本

代碼如下:

    /**
     * 上傳附件
     * @return
     * @throws Exception
     */
    public String uploadJPG() throws Exception{
        //得到一個(gè)客戶(hù)端(用來(lái)發(fā)送請(qǐng)求的)
        CloseableHttpClient client = HttpClients.createDefault();
        //創(chuàng)建一個(gè)Post請(qǐng)求
        HttpPost request = new HttpPost("http://192.168.1.8:8090/phpwind/index.php?c=upload&a=dorun&_json=1&_json=1");
        //entity表示主體(body)
        //StringEntity entity = null;
        HttpEntity entity = null;      
        //response表示響應(yīng)
        HttpResponse response = null;
        //headers表示消息頭(response headers)
        Header[] headers = null;
        String aid = null;
        try {
            //設(shè)置請(qǐng)求消息主體的內(nèi)容
            entity = MultipartEntityBuilder.create().
                addTextBody("Filename", "mm02.jpg").
                addTextBody("fid", "2").
                addTextBody("Bzi_winduser","msL4udGA%2BPNSm7bGPAdLhpDKMwseQABD2Z6iMxwPN%2FrtT65uQOO6cw%3D%3D").
                addTextBody("Bzi_visitor","s8hCqCZfxL3LMvGATleiatclmAgxUTQtW9P65vLo1aY%3D").
                addTextBody("Bzi_lastvisit","132%091542205707%09%2Fphpwind%2Findex.php%3Fm%3Demotion%26type%3Dbbs%26csrf_token%3D8434d84b23423e26").
                addTextBody("Bzi_visit_referer","fid_2_page_1").
                addTextBody("Upload","Submit Query").
                addTextBody("csrf_token","8434d84b23423e26").
                addBinaryBody("Filedata", new File("C:\\Users\\yangzc\\Desktop\\temp05\\images\\mm02.jpg")).build();
            request.setHeader("Cookie","csrf_token=8434d84b23423e26; Bzi_visit_referer=fid_2_page_1; Bzi_winduser=msL4udGA%2BPNSm7bGPAdLhpDKMwseQABD2Z6iMxwPN%2FrtT65uQOO6cw%3D%3D; Bzi_visitor=s8hCqCZfxL3LMvGATleiatclmAgxUTQtW9P65vLo1aY%3D; Bzi_lastvisit=132%091542205707%09%2Fphpwind%2Findex.php%3Fm%3Demotion%26type%3Dbbs%26csrf_token%3D8434d84b23423e26");
            request.setHeader("X-Requested-With","ShockwaveFlash/31.0.0.148");
            //將entity設(shè)置為post請(qǐng)求的主體
            request.setEntity(entity);
            //發(fā)送該post請(qǐng)求
            response = httpClient.execute(request);
            //
            headers = httpResponse.getAllHeaders();
            //輸出響應(yīng)消息頭的內(nèi)容
            for(Header h:headers){
                System.out.println(h.toString());
            }
            String responseBody = EntityUtils.toString(response.getEntity());
            //輸出響應(yīng)消息主體的內(nèi)容
            System.out.println(responseBody);
            JSONObject obj = (JSONObject)JSON.parse(responseBody);
            JSONObject data = (JSONObject)obj.get("data");
            aid = (String)data.get("aid");
            System.out.println("附件id是:" + aid);
        } catch (Exception e) {
            e.printStackTrace();
        }
        client.close();
        return aid;
    }

往表單里面添加跟附件有關(guān)的輸入項(xiàng)

        String script = "$('#mainForm').append(\"<input type='text' name='flashatt["+aid+"][desc]'>\");"
            + "$('#mainForm').append(\"<input type='text' name='flashatt["+aid+"][cost]'>\");" 
            + "$('#mainForm').append(\"<input type='text' name='flashatt["+aid+"][ctype]' value='1'>\");";

完整代碼

package webtest;

import java.io.File;
import java.util.concurrent.TimeUnit;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class JSTest {
    private WebDriver driver;
    private JavascriptExecutor jse;
    private String aid = null;    
    
    /**
     * 上傳附件
     * @return
     * @throws Exception
     */
    public String uploadJPG() throws Exception{
        //得到一個(gè)客戶(hù)端(用來(lái)發(fā)送請(qǐng)求的)
        CloseableHttpClient client = HttpClients.createDefault();
        //創(chuàng)建一個(gè)Post請(qǐng)求
        HttpPost request = new HttpPost("http://192.168.1.8:8090/phpwind/index.php?c=upload&a=dorun&_json=1&_json=1");
        //entity表示請(qǐng)求主體(body)
        //StringEntity entity = null;
        HttpEntity entity = null;      
        //response表示響應(yīng)
        HttpResponse response = null;
        //headers表示消息頭(response headers)
        Header[] headers = null;
        String aid = null;
        try {
            //設(shè)置請(qǐng)求消息主體的內(nèi)容
            entity = MultipartEntityBuilder.create().
                addTextBody("Filename", "mm02.jpg").
                addTextBody("fid", "2").
                addTextBody("Bzi_winduser","msL4udGA%2BPNSm7bGPAdLhpDKMwseQABD2Z6iMxwPN%2FrtT65uQOO6cw%3D%3D").
                addTextBody("Bzi_visitor","s8hCqCZfxL3LMvGATleiatclmAgxUTQtW9P65vLo1aY%3D").
                addTextBody("Bzi_lastvisit","132%091542205707%09%2Fphpwind%2Findex.php%3Fm%3Demotion%26type%3Dbbs%26csrf_token%3D8434d84b23423e26").
                addTextBody("Bzi_visit_referer","fid_2_page_1").
                addTextBody("Upload","Submit Query").
                addTextBody("csrf_token","8434d84b23423e26").
                addBinaryBody("Filedata", new File("C:\\Users\\yangzc\\Desktop\\temp05\\images\\mm02.jpg")).build();
            request.setHeader("Cookie","csrf_token=8434d84b23423e26; Bzi_visit_referer=fid_2_page_1; Bzi_winduser=msL4udGA%2BPNSm7bGPAdLhpDKMwseQABD2Z6iMxwPN%2FrtT65uQOO6cw%3D%3D; Bzi_visitor=s8hCqCZfxL3LMvGATleiatclmAgxUTQtW9P65vLo1aY%3D; Bzi_lastvisit=132%091542205707%09%2Fphpwind%2Findex.php%3Fm%3Demotion%26type%3Dbbs%26csrf_token%3D8434d84b23423e26");
            request.setHeader("X-Requested-With","ShockwaveFlash/31.0.0.148");
            //將entity設(shè)置為post請(qǐng)求的主體
            request.setEntity(entity);
            //發(fā)送該post請(qǐng)求
            response = httpClient.execute(request);
            //
            headers = response.getAllHeaders();
            //輸出響應(yīng)消息頭的內(nèi)容
            for(Header h:headers){
                System.out.println(h.toString());
            }
            String responseBody = EntityUtils.toString(response.getEntity());
            //輸出響應(yīng)消息主體的內(nèi)容
            System.out.println(responseBody);
            JSONObject obj = (JSONObject)JSON.parse(responseBody);
            JSONObject data = (JSONObject)obj.get("data");
            aid = (String)data.get("aid");
            System.out.println("附件id是:" + aid);
        } catch (Exception e) {
            e.printStackTrace();
        }
        client.close();
        return aid;
    }
      
    @BeforeMethod
    public void begin() throws Exception{
        //上傳附件
        aid = uploadJPG();
        //設(shè)置瀏覽器的路徑
        //System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");         
        //設(shè)置瀏覽器驅(qū)動(dòng)文件的路徑
        //System.setProperty("webdriver.gecko.driver", "D:/Python27/geckodriver.exe");    
        //創(chuàng)建一個(gè)驅(qū)動(dòng)工具,用來(lái)操縱瀏覽器
        //driver = new FirefoxDriver();   
        driver = new ChromeDriver();
        //窗口最大化
        driver.manage().window().maximize();
        //設(shè)置隱性等待最大時(shí)長(zhǎng)
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }  
      
    @Test
    public void f() throws Exception {
        driver.get("http://192.168.1.8:8090/phpwind/index.php?m=u&c=login");
        //driver.findElement(By.id("J_u_login_username")).sendKeys("zPmuGU43QiTyxCH");
        driver.findElement(By.id("J_u_login_username")).sendKeys("jojo");
        //
        driver.findElement(By.id("J_u_login_password")).sendKeys("123456");
        //
        driver.findElement(By.className("btn_big")).click();
        //
        Thread.sleep(2000);
        //
        driver.findElement(By.cssSelector("#J_head_forum_post > span > span")).click();
        //
        driver.findElement(By.xpath("http://*[@id='J_forum_list']/li[1]")).click();
        //
        driver.findElement(By.xpath("http://*[@id='J_forum_ul']/li[1]")).click();
        //
        driver.findElement(By.id("J_head_forum_sub")).click();
        //
        driver.findElement(By.id("J_atc_title")).sendKeys("附件編號(hào)"+aid+"這是一個(gè)標(biāo)題112233");
        //
        driver.switchTo().defaultContent();
        //切換到iframe框架
        driver.switchTo().frame(driver.findElement(By.className("wind_editor_iframe")));
        //
        driver.findElement(By.className("editor_content")).sendKeys("附件編號(hào)"+aid+"這是帖子的內(nèi)容112233");      
          
        String script = "$('#mainForm').append(\"<input type='text' name='flashatt["+aid+"][desc]'>\");"
            + "$('#mainForm').append(\"<input type='text' name='flashatt["+aid+"][cost]'>\");" 
            + "$('#mainForm').append(\"<input type='text' name='flashatt["+aid+"][ctype]' value='1'>\");";
        
        /*        
        String script = "var parent = document.getElementById(\"mainForm\");"
            + "var child1 = document.createElement(\"input\");"
            + "var child2 = document.createElement(\"input\");"
            + "var child3 = document.createElement(\"input\");"
            + "child1.setAttribute(\"type\",\"text\");"
            + "child1.setAttribute(\"name\",\"flashatt[17][desc]\");"
            + "child2.setAttribute(\"type\",\"text\");"
            + "child2.setAttribute(\"name\",\"flashatt[17][cost]\");"
            + "child3.setAttribute(\"type\",\"text\");"
            + "child3.setAttribute(\"name\",\"flashatt[17][ctype]\");"
            + "child3.setAttribute(\"value\",\"1\");"
            + "parent.appendChild(child1);"
            + "parent.appendChild(child2);"
            + "parent.appendChild(child3);";
        */
          
        System.out.println(script);
        Thread.sleep(1000);   
        driver.switchTo().defaultContent();
        jse = (JavascriptExecutor) driver;
        
        //
        injectjQueryIfNeeded();     
          
        Thread.sleep(1000);   
        jse.executeScript(script);
        //
        driver.findElement(By.id("J_post_sub")).click();          
        Thread.sleep(3000);
    }
      
    @AfterMethod
    public void end(){
        driver.quit();
    } 

    private void injectjQueryIfNeeded() {
        if (!jQueryLoaded())
            injectjQuery();
    }
 
  
    // 判斷是已加載jQuery
    public Boolean jQueryLoaded() {
        Boolean loaded;
        try {
            loaded = (Boolean) jse.executeScript("return " + "jQuery()!=null");
        } catch (WebDriverException e) {
            loaded = false;
        }
        return loaded;
    }

    //通過(guò)注入jQuery
    public void injectjQuery() {
        jse.executeScript(" var headID = "
            + "document.getElementsByTagName(\"head\")[0];"
            + "var newScript = document.createElement('script');"
            + "newScript.type = 'text/javascript';" + "newScript.src = "
            + "'http://192.168.1.8:8090"
            + "/phpwind/res/js/dev/jquery.js?v=20161021';"
            + "headID.appendChild(newScript);");
    }
}

執(zhí)行自動(dòng)化腳本

webdriver1114_02.gif

參考資料

[01] selenium 加載jquery
https://www.cnblogs.com/x666-6/p/8406436.html
[02] Flash上傳組件之SWFUpload文件上傳
https://www.cnblogs.com/ziranfengwei/p/7462808.html
[03] 文件上傳利器SWFUpload入門(mén)簡(jiǎn)易教程
https://www.cnblogs.com/diycp/articles/3497876.html

微信掃一掃關(guān)注該公眾號(hào)【測(cè)試開(kāi)發(fā)者部落】

image.png

點(diǎn)擊鏈接加入群聊【軟件測(cè)試學(xué)習(xí)交流群】
https://jq.qq.com/?_wv=1027&k=5eVEhfN
軟件測(cè)試學(xué)習(xí)交流QQ群號(hào):511619105

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胎挎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忆家,更是在濱河造成了極大的恐慌犹菇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芽卿,死亡現(xiàn)場(chǎng)離奇詭異揭芍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)卸例,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)称杨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筷转,你說(shuō)我怎么就攤上這事列另。” “怎么了旦装?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)摊滔。 經(jīng)常有香客問(wèn)我阴绢,道長(zhǎng)店乐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任呻袭,我火速辦了婚禮眨八,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘左电。我一直安慰自己廉侧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布篓足。 她就那樣靜靜地躺著段誊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栈拖。 梳的紋絲不亂的頭發(fā)上连舍,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音涩哟,去河邊找鬼索赏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贴彼,可吹牛的內(nèi)容都是我干的潜腻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼器仗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼融涣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起青灼,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤暴心,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后杂拨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體专普,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年弹沽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檀夹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡策橘,死狀恐怖炸渡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丽已,我是刑警寧澤蚌堵,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響吼畏,放射性物質(zhì)發(fā)生泄漏督赤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一泻蚊、第九天 我趴在偏房一處隱蔽的房頂上張望躲舌。 院中可真熱鬧,春花似錦性雄、人聲如沸没卸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)约计。三九已至,卻和暖如春滩褥,著一層夾襖步出監(jiān)牢的瞬間病蛉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工瑰煎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铺然,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓酒甸,卻偏偏與公主長(zhǎng)得像魄健,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子插勤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 直到現(xiàn)在沽瘦,我在做人做事方面依舊不合格。但今天很想聊聊這個(gè)話題农尖。 生活中析恋,總能遇到那么一些人,在接觸一段時(shí)間之后盛卡,會(huì)...
    瘋子乙閱讀 255評(píng)論 0 0
  • DC美劇《泰坦》第一集熟肉資源昨天已經(jīng)出來(lái)了滑沧,第一集內(nèi)容也非常精彩并村,節(jié)奏緊湊,其中有一個(gè)女配角似乎需要拿出來(lái)稍微介...
    DC中文網(wǎng)閱讀 593評(píng)論 0 0
  • 上個(gè)周六晚上陪添添輪滑的時(shí)候滓技,他跟我這樣說(shuō):“媽媽?zhuān)医裉煜挛缟喜珦粽n思考了一個(gè)問(wèn)題哩牍,地球就像是一本字典,每...
    瞾小緞閱讀 269評(píng)論 2 3
  • 每當(dāng)我看到它時(shí)令漂,我便會(huì)想起你膝昆。 18歲的生日禮物丸边,不是漂亮的高跟鞋,也不是美美的小...
    飄汝閱讀 302評(píng)論 0 0
  • 今天在家長(zhǎng)交流群里看到王老師分享的這段文字:又一個(gè)第100篇親子日記荚孵,再一次佐證親子日記是改變家庭關(guān)系原环、...
    度晨閱讀 305評(píng)論 0 2