zoukankan      html  css  js  c++  java
  • Selenium+java

    前言

    在做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操作,有兴趣的同学可以尝试去拓展,本文仅是抛砖引玉,更多需结合实际情况处理。

  • 相关阅读:
    创建对象的七种方式
    设计模式之工厂模式
    设计模式之单例模式
    排序算法之插入排序
    排序算法之选择排序
    类及对象初体验
    排序算法之冒泡排序
    迭代器和生成器
    装饰器
    函数进阶
  • 原文地址:https://www.cnblogs.com/longronglang/p/11299444.html
Copyright © 2011-2022 走看看