Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器-选择文本_Javascript_Angularjs_Selenium_Webdriver_Protractor - Fatal编程技术网

Javascript 量角器-选择文本

Javascript 量角器-选择文本,javascript,angularjs,selenium,webdriver,protractor,Javascript,Angularjs,Selenium,Webdriver,Protractor,使用量角器选择文本时,我遇到了一些实际问题 一点背景;这是一个用于撰写新闻文章的AngularJS CMS系统。我要突出显示的文本位于页面大部分的文本区域内。类似的应用程序是谷歌文档 有了webdriver,我相信我可以简单地使用以下内容: browser.actions().keyDown(protractor.Key.CTRL).sendKeys('a').perform(); 然而,我在MAC电脑上编写代码,尽管目前我们的测试是在SauceLabs的windows机器上运行的,但最终目标

使用量角器选择文本时,我遇到了一些实际问题

一点背景;这是一个用于撰写新闻文章的AngularJS CMS系统。我要突出显示的文本位于页面大部分的文本区域内。类似的应用程序是谷歌文档

有了webdriver,我相信我可以简单地使用以下内容:

browser.actions().keyDown(protractor.Key.CTRL).sendKeys('a').perform();
然而,我在MAC电脑上编写代码,尽管目前我们的测试是在SauceLabs的windows机器上运行的,但最终目标是移动到MAC电脑上模拟我们的用户

我尝试了一行类似的代码,但使用了Command(或CMD),但它不起作用,据介绍,OSX不支持本机密钥事件

我探索过的其他方法:

  • 尝试在元素中单击三次以选择所有文本…但我无法使其正常工作(是否有帮助?)。这一点很复杂,因为鼠标光标必须位于文本上方,才能高亮显示所有文本

  • 双击我的本地机器上的字段,可以选择文本区域中的最后一个工作,但在SauceLabs中,浏览器较小,因此可以选择不同的单词。这感觉太脆,无法使用,因为它在大多数机器上会有所不同

  • 将文本光标移动到文本区域的开头或结尾,按住Shift键并根据文本区域中的字符数按向左或向右箭头键。在这个实现中,我无法将光标移动到文本字段的开头或结尾


  • 感谢阅读,我意识到这有点长!如果你能想出一个我还没有想到的方法,或者一种编码三次单击或箭头键方法的方法,那将非常有用

    在OSX上是不可能的,请参见好的,我通过使用.executeScript方法编程选择文本来解决这个问题

    这有点欺骗,因为它没有模仿用户的交互,但我找不到替代方案,这被认为是一种可以接受的解决方法

    下面是代码,如果您感兴趣,这将选择文本区域中的第一段:

    Article.prototype.selectFirstParagraph = function(driver) {
        driver.executeScript(function () {
            var range = document.createRange();
            range.selectNode(document.body.querySelector('.ui-rich-text-editor__input').firstChild);
            var sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
            return sel;
        });
    }
    

    对于那些正在寻找窗口的人

    var Key = protractor.Key;
    var Key = protractor.Key;
    browser.actions().sendKeys(Key.chord(Key.CONTROL, 's')).perform();
    browser.actions().sendKeys(Key.chord(Key.CONTROL, Key.SHIFT, 'm')).perform();
    browser.actions().sendKeys(Key.chord(Key.CONTROL, 'o')).perform();
    

    根据Selenium驱动程序和MacOS的问题,命令键事件未正确传播。

    我遇到的情况是,我发现几十种解决方案和变通办法都不起作用。不确定它是否与操作系统相关,或者只是输入字段为数字且自动格式化的特定情况

    这是一个适合我的解决方案,我想其他人可能会发现它很有用(操作系统不可知论者,包括macOS):


    “鼠标光标必须在文本上”您是否尝试将鼠标移到(元素,偏移量),其中偏移量={x:somePixel,y:somePixel}?您好@nilsK,谢谢您的回复。我想(如果我错了,请纠正我),偏移量是以像素为单位测量的,因此也取决于窗口大小吗?如果是这样的话,这将是一种非常脆弱的工作方式,因为它在大多数计算机上是不同的。另外,我很好奇,除了测试通过之外,你怎么能去bug知道什么时候你有正确的偏移量呢?是的,偏移量是用像素来衡量的,我想这是个坏主意。我在使用圆角悬停元素时遇到问题,偏移量为2-3像素会有所帮助。也许对你没什么帮助。无论如何,为了获得正确的偏移量,我使用了chrome,它的开发工具包含一个标尺;)F12->单击“设置轮子”->元素“显示标尺”感谢@nilsK的解释
      const someInput = element(by.css('input#someId'));
      replaceInputValue(someInput, 'my new value');
    
      async function replaceInputValue(input: ElementFinder, newValue: string) {
        const valLength = (await input.getAttribute('value')).length;
        await input.sendKeys(
          ...Array(valLength).fill(protractor.Key.BACK_SPACE),
          newValue);
      }