使用 selenium 网格测试 HTML5 应用程序的粘贴功能

Testing paste functionality of a HTML5 application using selenium grid

我有一些测试可以在我的本地 PC 上使用 webdriver 运行,它利用 java.awt.datatransfer.Clipboard 设置内容并粘贴到 HTML5 应用程序中。当使用远程执行测试的 Selenium 网格时,我如何才能完成类似的事情?

是否有可能例如在地址栏中键入但实际上没有访问该页面,select 该文本然后发送 CTRL+[=20 的键=]C 获取文本到远程剪贴板?

This answer 表明这是不可能的,尽管考虑到这是 6 年前写的,事情可能已经改变,特别是考虑到当前桌面上丰富的 HTML5 应用程序的流行。 selenium 不支持用户界面测试的这个方面吗?

以下是我们在本地进行复制和粘贴的方法(C# 中的示例):

            Thread thread = new Thread(() => Clipboard.SetText(text));
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();
            element.SendKeys(OpenQA.Selenium.Keys.Control + "v");

下面是我们如何在网格节点上进行复制和粘贴:

        string toPaste = "something";
        element.SendKeys(toPaste);
        element.SendKeys(OpenQA.Selenium.Keys.Control + "a"); //select all
        element.SendKeys(OpenQA.Selenium.Keys.Control + "c"); //copy 
        elementTwo.SendKeys(OpenQA.Selenium.Keys.Control + "v"); //paste

在选择(突出显示)然后复制和粘贴之前,您必须有一个地方可以输入文本。这是它将在节点上工作的方式。如果您不能在自己的应用程序中使用文本框,您可以随时转到 google.com 并在搜索栏中键入。然后复制该文本作为测试的第一步,导航到您的应用程序并将其粘贴。

但是如果您同时在同一台机器(网格节点)上进行两个测试 运行,剪贴板资源将不是线程安全的。您可能需要实现一些自定义锁定逻辑