[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[转帖]Execute jQuery With Selenium WebDriver Example

上一篇:[备忘]Selenium IDE,录屏插件
下一篇:[备忘]BigDecimal避免科学计数法用toPlainString()方法即可。

添加日期:2019/2/21 9:41:39 快速返回   返回列表 阅读1542次
原文:https://www.dev2qa.com/execute-jquery-with-selenium-webdriver-example/
---------------------


package com.dev2qa.webdriver;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;

public class TestRunjQuery {

    private ChromeDriver chromeDriver = null;

    private JavascriptExecutor javascriptExecutor;

    @BeforeClass
    public void beforeClass() {

        // Initialize google Chrome webdriver.

        if(chromeDriver == null)
        {
            //Set string variable value to Chrome Driver executable file path.
            String chromeDriverPath = "/Users/zhaosong/Documents/WorkSpace/tool/chromedriver";

            //Assign chromeDriverPath to system property "webdriver.chrome.driver"
            System.setProperty("webdriver.chrome.driver", chromeDriverPath);

            //Create a new instance
            chromeDriver = new ChromeDriver();

            javascriptExecutor = (JavascriptExecutor)chromeDriver;
        }

    }

    @AfterClass
    public void afterClass() {
        // Quit the google Chrome driver. 
        if(chromeDriver != null)
        {
            chromeDriver.quit();
            chromeDriver = null;
        }
    }


    @Test(priority = 0)
    public void runjQueryScript() {

        // This web page contains the jQuery js file.
        chromeDriver.get("https://www.dev2qa.com/demo/jquery/hide-show-contain-jquery.html");

        WebElement button = chromeDriver.findElementById("showHideDiv");

        if(isElementVisible(button))
        {
            if(isjQueryLoaded(chromeDriver, 10))
            {
                runjQueryJavaScipt();
            }

        }
    }



    @Test(priority = 1)
    public void runAfterInjectjQueryScript() {

        // This web page do not contains the jQuery js file. So we need to inject jQuery js file first.
        chromeDriver.get("https://www.dev2qa.com/demo/jquery/hide-show-not-contain-jquery.html");

        // Inject and load jquery script first. After inject jQuery script the animation effect can be shown again.
        // You can comment below code to see the different.
        injectjQuery();

        if(isjQueryLoaded(chromeDriver, 10))
        {
            runjQueryJavaScipt();
        }
    }


    /* This method will run a short jQuery script with JavascriptExecutor object. */
    private void runjQueryJavaScipt()
    {
        // This is the jQuery js script string that will be executed by js executor object. 
        // we do not click the button to trigger it. Just execute the script directly.
        String script = "// Get div display attribute value.\n" +
                "                var display = $(\".div\")[0].style.display;\n" +
                "                if(display=='none')\n" +
                "                {\n" +
                "                    $(\".div\").show(1000);\n" +
                "                }else\n" +
                "                {\n" +
                "                    $(\".div\").hide(1000);\n" +
                "                }";


        // Execute above jQuery script for the first time to hide the div.
        javascriptExecutor.executeScript(script);

        // Then sleep 3 seconds too see the effect.
        try
        {
            Thread.sleep(3000);
        }catch(InterruptedException ex)
        {
            ex.printStackTrace();
        }

        // Execute above jQuery script for the second time to show the div again.
        javascriptExecutor.executeScript(script);

        // Then sleep 3 seconds to see the effect.
        try
        {
            Thread.sleep(3000);
        }catch(InterruptedException ex)
        {
            ex.printStackTrace();
        }
    }

    /* Check and return whether the web element is visible or not. */
    public boolean isElementVisible(WebElement element){
        boolean ret = true;
        try
        {
            // Create visibility expected condition.
            ExpectedCondition condition = ExpectedConditions.visibilityOf(element);

            // Create WebDriver wait object.
            WebDriverWait webDriverWait = new WebDriverWait(chromeDriver, 30);

            // WebDriver wait until the expected condition is true.
            webDriverWait.until(condition);
        }catch(TimeoutException ex)
        {
            ex.printStackTrace();
            ret = false;
        }finally
        {
            return ret;
        }
    }

    /* Check whether jQuery script file has been loaded in the web browser or not. */
    public boolean isjQueryLoaded(WebDriver driver, int waitTime) {

        boolean ret = true;

        try
        {
            System.out.println("Check jQuery loading status. ");

            WebDriverWait webDriverWait = new WebDriverWait(chromeDriver, 30);

            // Create a new expected condition.
            ExpectedCondition condition = new ExpectedCondition<Boolean>() {

                // Implement apply method.
                public Boolean apply(WebDriver webDriver) {

                    JavascriptExecutor jsExecutor = (JavascriptExecutor) webDriver;

                    // This scrpit will get jQuery ready state.
                    String scriptString = "return document.readyState";

                    String readyState = jsExecutor.executeScript(scriptString).toString();

                    System.out.println("Document Ready State: " + readyState);

                    // This script can return jQuery script load state.
                    scriptString = "return !!window.jQuery && window.jQuery.active == 0";

                    return (Boolean) jsExecutor.executeScript(scriptString);
                }
            };

            // Get the check result in a boolean value.
            Boolean checkResult = (Boolean)webDriverWait.until(condition);
            ret = checkResult.booleanValue();

        }catch(TimeoutException ex)
        {
            ex.printStackTrace();
            ret = false;
        }finally
        {
            if(ret)
            {
                System.out.println("jQuery has been loaded in the page.");
            }else
            {
                System.out.println("jQuery has not been loaded in the page.");
            }

            return ret;
        }

    }

    /* This method will inject a local jQuery script file into WebDriver Chrome browser that browse current web page. */
    private boolean injectjQuery()
    {
        boolean ret = true;
        try
        {
            // Read out the local jQuery script content string.
            StringBuffer jQueryStringBuf = new StringBuffer();

            File file = new File("/Users/zhaosong/Documents/WorkSpace/dev2qa.com-example-code/JavaScriptExampleWorkspace/jQueryWorkspace/jQueryProject/lib/jquery-3.3.1.min.js");

            FileReader fr = new FileReader(file);

            BufferedReader br = new BufferedReader(fr);

            String line = br.readLine();

            while(line != null)
            {
                jQueryStringBuf.append(line);

                line = br.readLine();
            }

            // Execute the jquery js content string to enable it.
            javascriptExecutor.executeScript(jQueryStringBuf.toString());
        }catch(IOException ex)
        {
            ret = false;
            ex.printStackTrace();
        }catch(Exception ex)
        {
            ret = false;
            ex.printStackTrace();
        }finally
        {
            if(ret)
            {
                System.out.println("jQuery has been injected successfully.");
            }else
            {
                System.out.println("jQuery has not een injected successfully.");
            }

            return ret;
        }
    }


}

 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved