【问题标题】:Text in clipboard with protractor js带有量角器js的剪贴板中的文本
【发布时间】:2017-09-19 20:54:39
【问题描述】:

如何使用量角器复制特定文本?

我想使用此命令加载要粘贴的文本:

return browser.actions().sendKeys(Keys.CONTROL, 'v').perform();

示例:

加载我的文本“test”,然后使用此命令粘贴“test”

我想在我的剪贴板中放一个文本

【问题讨论】:

  • 当您说特定文本时,该文本是在一个单独的元素中,还是在一个元素中,您试图从中提取它?您还可以使用您尝试对其执行操作的 html 元素代码更新您的问题吗?谢谢
  • 剪贴板中的文本

标签: javascript angularjs protractor bdd


【解决方案1】:

我可以直接在我的 ng-model 中输入一个值,而不是使用 sendKeys 吗?

可以,你可以通过.evaluate()直接设置model的值:

var elm = element(by.model("mymodel.field"));
elm.evaluate("mymodel.field = 'test';");

将文本放入剪贴板

这个想法是使用现有的或动态创建一个input 元素,您可以将文本发送到该元素,选择输入中的所有文本并使用CTRL/COMMAND + C 快捷方式复制它。

示例:

var textToBeCopied = "my text";

// creating a new input element
browser.executeScript(function () {
    var el = document.createElement('input');
    el.setAttribute('id', 'customInput'); 

    document.getElementsByTagName('body')[0].appendChild(el);
});

// set the input value to a desired text
var newInput = $("#customInput");
newInput.sendKeys(textToBeCopied);

// select all and copy
newInput.sendKeys(protractor.Key.chord(browser.controlKey, "a"));
newInput.sendKeys(protractor.Key.chord(browser.controlKey, "c"));

其中browser.controlKey 是处理CTRL/COMMAND 键的跨平台方式:

【讨论】:

  • 谢谢!另外,我可以直接在我的 ng-model 中输入一个值,而不是使用 sendKeys 吗?
  • 谢谢!最后一个问题:我可以用 sendKeys 即时推送我的文本吗,我没有点击效果,有可能吗?
  • @JérémieChazelle 好吧,如果您使用 command/ctrl + v 从剪贴板粘贴,那么是的..但是使用 sendKeys 我认为它总是一个接一个。谢谢。
  • @alecxe 执行粘贴操作会将文本粘贴为“mytext”而不是“my text”,我需要带有空格/制表符的文本,无论字符串中指定什么。还有 sendKeys(protractor.Key.chord(browser.controlKey, "a"));不适合我使用 newInput.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "a"));
  • 在 chrome 中,它会删除空格/制表符,即“mytext”而不是“my text”,而 firefox 它只粘贴字符串“my”的第一部分
【解决方案2】:

与此相关:我需要测试一个对话框,当用户按下对话框中的“复制”按钮时,该对话框会在剪贴板中放置一些文本。我想测试文本是否真的被复制到剪贴板。我找到了这个“复制粘贴”库:https://www.npmjs.com/package/copy-paste。 “一个命令行实用程序,允许对系统剪贴板进行读/写(即复制/粘贴)访问。它通过包装 pbcopy/pbpaste(对于 OSX)、xclip(对于 Linux 和 OpenBSD)和 clip(对于 Windows)来做到这一点。 "我会说它是一个 javascript 模块而不是命令行实用程序。无论如何,我开始使用它,因为对 xclip(Linux)的依赖对我来说不是问题。

【讨论】:

    【解决方案3】:

    这是我使用量角器将文本复制到剪贴板的 sn-p。我需要接受制表符,因为我的大部分测试都涉及从电子表格中剪切和粘贴,其中制表符是默认的列分隔符。

    此外,它更好地适应了 html 正文布局中的细微差别(溢出:隐藏)。

    function copyToClipboard(browser, text) {
      var id = 'someCustomIdToAvoidAliasing';
      var newInput = browser.element(by.css("#" + id));
      return browser.executeScript(function () {
        var el = document.createElement('textarea');
        el.setAttribute('id', 'someCustomIdToAvoidAliasing');
        el.setAttribute('style', 'position:fixed;z-index:10000;top:0;left:0');
        el.onkeydown = function(e) {
          if (e.keyCode === 9) {
            this.value = this.value + "\t";
            return false;
          }
        };
        document.getElementsByTagName('body')[0].appendChild(el);
      })
      .then(function() {
        return newInput.sendKeys(text);
      })
      .then(function() {
        return newInput.sendKeys(protractor.Key.CONTROL, "a", protractor.Key.NULL);
      })
      .then(function() {
        return newInput.sendKeys(protractor.Key.CONTROL, "c", protractor.Key.NULL);
      })
      .then(function() {
        return browser.executeScript(function() {
          var el = document.getElementById('someCustomIdToAvoidAliasing');
          el.remove();
        });
      });
    }

    【讨论】:

    • 使用 ** "复制粘贴" ** 'var text = "复制文本" require("copy-paste").copy(text); element(by.id('csv')).sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "v"));'
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多