美文网首页
使用自动化脚本发表带有图片附件的帖子

使用自动化脚本发表带有图片附件的帖子

作者: 测试老杨 | 来源:发表于2018-11-15 09:26 被阅读19次

    扫码关注本人公众号

    image.png

    另一种思路(针对swfupload上传插件)

    1、使用httpclient上传附件
    2、调用JS脚本,往表单里面添加跟附件有关的输入项


    image.png

    设计上传图片的脚本

    代码如下:

        /**
         * 上传附件
         * @return
         * @throws Exception
         */
        public String uploadJPG() throws Exception{
            //得到一个客户端(用来发送请求的)
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //创建一个Post请求
            HttpPost httpPost = 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;      
            //httpResponse表示响应
            HttpResponse httpResponse = null;
            //headers表示消息头(response headers)
            Header[] headers = null;
            String aid = null;
            try {
                //设置请求消息主体的内容
                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();
                httpPost.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");
                httpPost.setHeader("X-Requested-With","ShockwaveFlash/31.0.0.148");
                //将entity设置为post请求的主体
                httpPost.setEntity(entity);
                //发送该post请求
                httpResponse = httpClient.execute(httpPost);
                //
                headers = httpResponse.getAllHeaders();
                //输出响应消息头的内容
                for(Header h:headers){
                    System.out.println(h.toString());
                }
                String responseContent = EntityUtils.toString(httpResponse.getEntity());
                //输出响应消息主体的内容
                System.out.println(responseContent);
                JSONObject obj = (JSONObject)JSON.parse(responseContent);
                JSONObject data = (JSONObject)obj.get("data");
                aid = (String)data.get("aid");
                System.out.println("附件id是:" + aid);
            } catch (Exception e) {
                e.printStackTrace();
            }
            httpClient.close();
            return aid;
        }
    

    往表单里面添加跟附件有关的输入项

            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{
            //得到一个客户端(用来发送请求的)
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //创建一个Post请求
            HttpPost httpPost = 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;      
            //httpResponse表示响应
            HttpResponse httpResponse = null;
            //headers表示消息头(response headers)
            Header[] headers = null;
            String aid = null;
            try {
                //设置请求消息主体的内容
                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();
                httpPost.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");
                httpPost.setHeader("X-Requested-With","ShockwaveFlash/31.0.0.148");
                //将entity设置为post请求的主体
                httpPost.setEntity(entity);
                //发送该post请求
                httpResponse = httpClient.execute(httpPost);
                //
                headers = httpResponse.getAllHeaders();
                //输出响应消息头的内容
                for(Header h:headers){
                    System.out.println(h.toString());
                }
                String responseContent = EntityUtils.toString(httpResponse.getEntity());
                //输出响应消息主体的内容
                System.out.println(responseContent);
                JSONObject obj = (JSONObject)JSON.parse(responseContent);
                JSONObject data = (JSONObject)obj.get("data");
                aid = (String)data.get("aid");
                System.out.println("附件id是:" + aid);
            } catch (Exception e) {
                e.printStackTrace();
            }
            httpClient.close();
            return aid;
        }
          
        @BeforeMethod
        public void begin() throws Exception{
            //上传附件
            aid = uploadJPG();
            //设置浏览器的路径
            //System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");         
            //设置浏览器驱动文件的路径
            //System.setProperty("webdriver.gecko.driver", "D:/Python27/geckodriver.exe");    
            //创建一个驱动工具,用来操纵浏览器
            //driver = new FirefoxDriver();   
            driver = new ChromeDriver();
            //窗口最大化
            driver.manage().window().maximize();
            //设置隐性等待最大时长
            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("//*[@id='J_forum_list']/li[1]")).click();
            //
            driver.findElement(By.xpath("//*[@id='J_forum_ul']/li[1]")).click();
            //
            driver.findElement(By.id("J_head_forum_sub")).click();
            //
            driver.findElement(By.id("J_atc_title")).sendKeys("附件编号"+aid+"这是一个标题112233");
            //
            driver.switchTo().defaultContent();
            //切换到iframe框架
            driver.switchTo().frame(driver.findElement(By.className("wind_editor_iframe")));
            //
            driver.findElement(By.className("editor_content")).sendKeys("附件编号"+aid+"这是帖子的内容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;
        }
    
        //通过注入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);");
        }
    }
    
    

    执行自动化脚本

    webdriver1114_02.gif

    参考资料

    https://www.cnblogs.com/x666-6/p/8406436.html

    相关文章

      网友评论

          本文标题:使用自动化脚本发表带有图片附件的帖子

          本文链接:https://www.haomeiwen.com/subject/niyefqtx.html