【问题标题】:How to fetch copied content from a clipboard - Selenium headless mode如何从剪贴板中获取复制的内容 - Selenium 无头模式
【发布时间】:2020-11-05 00:25:56
【问题描述】:

我有一个带有“复制链接”按钮的网页,点击它会从文本框中复制一些数据。此外,这些 selenium 测试将在 Linux 机器上运行(无头模式)。我使用了 awt Toolkit api,但由于它在 Linux 无头模式下运行而失败并出现以下堆栈跟踪。在 Linux 模式下似乎不支持 Toolkit

Test Failed: {}[class: tests.AMUSanityTests, method: test, exception: java.awt.HeadlessException, message: 'No X11 DISPLAY variable was set, but this program performed an operation which requires it.', stack trace: 
sun.awt.HeadlessToolkit.getSystemClipboard(HeadlessToolkit.java:309)

我也尝试过使用 selenium sendKeys,但这是一个 void 方法,因此我无法获取内容。网页上没有地方让我粘贴内容再复制验证。

我需要一种方法来提取复制的内容以进行验证。

有人对如何实现这一点有解决方案吗?

谢谢。

【问题讨论】:

    标签: java selenium testing selenium-webdriver automation


    【解决方案1】:

    我写了一个小类,以某种方式做到这一点:

    public class ClipboardUtil {
    
        public static String fetchClipboardContents() throws IOException {
            String contents = "";
            String command = "xclip --clipboard -o";
            Process process = Runtime.getRuntime().exec(command);
            try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
                contents = br.readLine();
            }
            return contents;
        }
    
    }
    

    静态方法执行一个linux命令xclip --clipboard -o,将剪贴板的内容输出到终端。 Java 获取输出并将其作为字符串返回。

    您可以在 linux 中执行一些其他命令,以获得所需的输出,并且 java 代码应该保持不变。

    信息:

    我使用 Ubuntu 编写此代码。示例命令返回复制的内容或当前选择的内容。使用不同的 linux 命令是个好主意。

    【讨论】:

    • 运行这个 linux 命令会在终端上抛出以下错误错误:无法打开显示:(null)
    • 人们可以找到一个不同的命令来完成这项工作,或者如果其他一切都失败了,可以编写一个自定义的 shell 脚本。如果您可以将剪贴板内容输出到终端,则可以在 java 中获得相同的信息。
    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多