1. 程式人生 > >Selenium+java - 呼叫JavaScript操作

Selenium+java - 呼叫JavaScript操作

前言

在做web自動化時,有些情況selenium的api無法完成,需要通過第三方手段比如js來完成實現,比如去改變某些元素物件的屬性或者進行一些特殊的操作,本文將來講解怎樣來呼叫JavaScript完成特殊操作。

用法

  1. 建立一個執行 JS 的物件,也就是 JavascriptExecutor 物件,這個物件是由 driver 進行強制型別轉換而來,即JavascriptExecutor js= (JavascriptExecutor)driver;
  2. 然後這個物件 js 就可以呼叫 executeScript 方法來執行一段 JS,這段 JS 的語句是以一段字串的形式給傳參到 executeScript 中去的

實際案例

那麼下面我們一起來練習一下:

場景1

開啟百度首頁,並彈窗提示hellow,world!,關閉彈窗,控制檯輸出彈窗文字hellow,world!

具體程式碼如下:

import org.openqa.selenium.Alert;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
 * selenium呼叫JavaScript案例
 *
 * @author rongrong
 */
public class TestJavaScript {

    WebDriver driver;

    @BeforeClass
    public void beforeClass() {
        System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://www.baidu.com/");
    }

    /**
     * 場景1:開啟百度首頁,並彈窗提示hellow,world!,關閉彈窗,控制檯輸出彈窗文字hellow,world!
     */
    @Test
    public void testJavaScript() {
        JavascriptExecutor j = (JavascriptExecutor) driver;
        j.executeScript("alert('hellow,world!')");
        Alert alert = driver.switchTo().alert();
        String text = alert.getText();
        System.out.println(text);
        alert.accept();
    }

    @AfterClass
    public void afterClass() {
        driver.quit();
    }

}

場景2

開啟百度首頁,將百度按鈕改為MyLove

具體程式碼如下:

@Test
    public void testChangeColor() {
        WebElement element = driver.findElement(By.id("su"));
        JavascriptExecutor j = (JavascriptExecutor) driver;
        j.executeScript("document.getElementById('su').setAttribute('value', 'MyLove');",element);
    }

執行效果

關於更多呼叫JavaScript操作,有興趣的同學可以嘗試去拓展,本文僅是拋磚引玉,更多需結合實際情況處