在编写自动化脚本过程中,调试脚本是一件麻烦的事,我们需要不断调整代码来验证想法,反复从头开始执行,这将耗费大量时间。交互式编程可以让这件事变得轻松简单

交互式编程

交互式编程是一种编程方法,它允许工程师与计算机进行实时的、逐行的交互,以开发、测试和执行代码,这种编程方式通常用于脚本语言以及快速原型开发中。以下是交互式编程的一些特点:

对新手而言,通过不断尝试不同的代码片段,可以快速掌握编程语言的基本语法。

yqhp 交互式编程

An image

JShell 核心执行流程

An image

以下通过一个示例,更直观地了解 JShell 核心执行流程

  1. 类定义
// 运行代码
class HelloWorld {
    static void say() {
        System.out.println("hello world");
    }
}

// JShell生成的代码(简化版) -> 编译并加载到JVM
class $1 {
    public static class HelloWorld {
        static void say() {
            System.out.println("hello world");
        }
    }
}
  1. 方法定义
// 运行代码
boolean exists(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (Exception e) {
        return false;
    }
}

// JShell生成的代码(简化版) -> 编译并加载到JVM
import static $0.driver;
class $2 {
    public static boolean exists(By by) {
        try {
            driver.findElement(by);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
  1. 使用步骤 1 与 步骤 2 定义的类与方法
// 运行代码
if (exists(By.id("android:id/button1"))) {
    HelloWorld.say();
}

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $1.HelloWorld;
import static $2.exists;
class $3 {
    public static Object do_it$() throws Throwable {
        if (exists(By.id("android:id/button1"))) {
            HelloWorld.say();
        }
        return null;
    }
}
  1. 查找元素
// 运行代码
var logintBtn = driver.findElement(By.id("android:id/tv_login"));

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $0.driver;
class $4 {
    public static org.openqa.selenium.WebElement logintBtn;
    public static Object do_it$() throws Throwable {
        return logintBtn = driver.findElement(By.id("android:id/tv_login"));
    }
}
  1. 点击元素
// 运行代码
logintBtn.click()

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $4.logintBtn;
class $5 {
    public static Object do_it$() throws Throwable {
        logintBtn.click();
        return null;
    }
}
  1. 获取元素 text
// 运行代码
var text = logintBtn.getText();

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $4.logintBtn;
class $6 {
    public static String text;
    public static Object do_it$() throws Throwable {
        return text = logintBtn.getText();
    }
}

开源地址: https://github.com/yqhp

文档地址: https://yqhp.github.io/docs/

如有帮助,github star 支持下吧:)


↙↙↙阅读原文可查看相关链接,并与作者交流