jck28 - 小柒 - selenium Option常用操作

一,headless 无头浏览器使用

1,Options概述

  • 是一个配置浏览器启动的选项类,用于自定义和配置Driver会话
  • 常见使用场景:
    • 设置无头模式:不会显示调用浏览器,避免人为干扰的问题。
    • 设置调试模式:调试自动化测试代码(浏览器复用)

2,Options参数配置

public class OptionTest {
    @Test
    void option(){
        ChromeOptions chromeOptions = new ChromeOptions();
        // 无头模式
        chromeOptions.addArguments("--headless");
        // 窗体最大化
        chromeOptions.addArguments("start-maximized");
       //允许所有来源连接(高版本不配置会报403)
        options.addArguments("--remote-allow-origins=*");


        WebDriver driver = new ChromeDriver(chromeOptions);
        // 打开测试人页面
        driver.get("https://ceshiren.com/");
        // 获取登录按钮文本信息
        String loginButtonText = driver.findElement(By.cssSelector(".login-button")).getText();
        System.out.println(loginButtonText);
        driver.quit();
    }
}

二,capability 配置参数解析

1,capability概述

  • Capabilities是WebDriver支持的标准命令之外的扩展命令(配置信息)
  • 配置web驱动的属性,如浏览器名称、浏览器平台等。
  • 结合Selenium Grid完成分布式、兼容性等测试

2,capability 使用示例

public class CapabilityTest {
    @Test
    void ceshiren(){
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setCapability("platformName", "mac");
        chromeOptions.setCapability("browserName", "chrome");
        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("https://ceshiren.com/");
        String text = driver.findElement(By.cssSelector(".login-button")).getText();
        System.out.println(text);
        driver.quit();
    }
}

3,Selenium Grid

(1)介绍

  • Selenium Grid 允许我们在多台机器上并行运行测试,并集中管理不同的浏览器版本和浏览器配置(而不是在每个单独的测试中)。
  • 官网地址:Grid | Selenium
    image

(2)演示环境

  • 学院搭建的演示环境:Selenium Grid
  • (搭建教程会在 docker 章节讲解)

(3)代码实现

  • 保证本地可以正常调通
  • 实例化Remote()类并添加相应的配置
    • 远程地址
    • 设备配置
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import static java.lang.Thread.sleep;

public class JavScriptTest {
    private static WebDriver driver;

    @BeforeAll
    static void setupClass(){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        driver = new ChromeDriver(options);
    }

    @AfterAll
    static void tearDownClass() throws InterruptedException {
        sleep(5000);
        driver.quit();
    }

    @Test
    void taobaoTest() throws InterruptedException {
        driver.get("https://www.taobao.com/");
        //第一种使用方法
        ((JavascriptExecutor)driver).executeScript(
"document.querySelector(\"#J_SiteNavMytaobao\").className=\"site-nav-menu site-nav-mytaobao site-nav-multi-menu J_MultiMenu site-nav-menu-hover\"");
        sleep(2000);
        driver.findElement(By.xpath("//*[text()='我的足迹']")).click();
    }

    @Test
    void trainTest() throws InterruptedException {
        driver.get("https://www.12306.cn/index/");
        //声明一个js实例
        JavascriptExecutor js = (JavascriptExecutor)driver;
        //第一种方法获取js返回值:修改对应的日期属性值
//        js.executeScript("document.querySelector(\"#train_date\").value=\"2025-05-15\"");
        //如果需要获取js的返回值,js 脚本内必须要加上return
//        String  date = (String) js.executeScript("return document.querySelector(\"#train_date\").value");
//        System.out.println(date);

        //第二种方法获取js返回值:结合findElement实现 - arguments[0]就是trainDate
        WebElement trainDate = driver.findElement(By.id("train_date"));
        js.executeScript("arguments[0].value=\"2025-05-16\"", trainDate);
        String date2 = (String) js.executeScript("return arguments[0].value",trainDate);
        System.out.println(date2);
    }
}