期待选定的文字

时间:2015-09-05 09:07:38

标签: javascript angularjs protractor angularjs-e2e e2e-testing

我可以通过许多不同的方式用量角器模拟文本选择。但我找不到解决方案,我怎么能期望文本真正被选中。如何在不使用标记的情况下完成此操作?

我可以通过量角器模拟选择文本:

  1. DragAndDrop函数(鼠标)
  2. 组合:browser.actions()。sendKeys(protractor.Key.CONTROL,'a')。perform();
  3. 组合:shift +向左箭头

2 个答案:

答案 0 :(得分:3)

阐述迈克尔对一个工作实例的评论。

在下面的演示示例中,我们导航到AngularJS website,发送"测试"文本到右上方的搜索输入,按向左箭头3次将光标向左移动3个字符,然后按SHIFT + ARROW_RIGHT键盘组合2次以选择接下来的2个字符 - 其中是inenter image description here

最后,我们正在应用解决方案来获取提供的选择文本here并声明:

describe("Get selection text", function () {
    beforeEach(function () {
        browser.get("https://angularjs.org/");
    });

    it("should input 'testing', select 'in' and assert it is selected", function () {
        var q = element(by.name("as_q"));

        // enter 'testing' and go 3 chars left
        q.sendKeys("testing")
            .sendKeys(protractor.Key.ARROW_LEFT)
            .sendKeys(protractor.Key.ARROW_LEFT)
            .sendKeys(protractor.Key.ARROW_LEFT);

        // select 2 chars to the right
        browser.actions()
            .keyDown(protractor.Key.SHIFT)
            .sendKeys(protractor.Key.ARROW_RIGHT)
            .sendKeys(protractor.Key.ARROW_RIGHT)
            .keyUp(protractor.Key.SHIFT)
            .perform();

        // get highlighted text
        var highligtedText = browser.executeScript(function getSelectionText() {
            var text = "";
            if (window.getSelection) {
                text = window.getSelection().toString();
            } else if (document.selection && document.selection.type != "Control") {
                text = document.selection.createRange().text;
            }
            return text;
        });

        expect(highligtedText).toEqual("in");
    });
});

希望这会帮助你和其他人来这里。

答案 1 :(得分:2)

您可能还需要验证是否已选中特定文本框中的文本。您可以使用以下两行来完成此操作:

*document.evaluate( 'XpathOfTheElement//input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.selectionStart
document.evaluate( 'XpathOfTheElement//input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.selectionEnd*

如果在字符串'testing'中选择'in',则第一行将返回4,第二行将返回6.