期望选定的文本
Expect selected text
我可以通过很多不同的方式用量角器模拟文本 selection。但是我找不到解决方案,我怎么能期望文本真的被 selected。我如何在不使用标记的情况下做到这一点?
我可以用量角器模拟 select 文本:
- 拖放功能(鼠标)
- 组合:browser.actions().sendKeys(protractor.Key.CONTROL, 'a').perform();
- 组合:shift + 向左箭头
将 Michael 的评论阐述为一个工作示例。
在下面的演示示例中,我们导航到 AngularJS website,将 "testing" 文本发送到右上角的搜索输入,按左箭头 3 次将光标移动 3 个字符到左边,然后按 SHIFT
+ ARROW_RIGHT
键盘组合 2 次以 select 接下来的 2 个字符 - 即 in
:
最后,我们正在应用解决方案来获取提供的 selection 文本 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");
});
});
希望这对您和来到这里的其他人有所帮助。
在这里您可能还需要验证是否选中了特定文本框中的文本。您可以使用下面的这两行来做到这一点:
*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',那么第一行将为 return 4,第二行将为 return 6。
我可以通过很多不同的方式用量角器模拟文本 selection。但是我找不到解决方案,我怎么能期望文本真的被 selected。我如何在不使用标记的情况下做到这一点?
我可以用量角器模拟 select 文本:
- 拖放功能(鼠标)
- 组合:browser.actions().sendKeys(protractor.Key.CONTROL, 'a').perform();
- 组合:shift + 向左箭头
将 Michael 的评论阐述为一个工作示例。
在下面的演示示例中,我们导航到 AngularJS website,将 "testing" 文本发送到右上角的搜索输入,按左箭头 3 次将光标移动 3 个字符到左边,然后按 SHIFT
+ ARROW_RIGHT
键盘组合 2 次以 select 接下来的 2 个字符 - 即 in
:
最后,我们正在应用解决方案来获取提供的 selection 文本 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");
});
});
希望这对您和来到这里的其他人有所帮助。
在这里您可能还需要验证是否选中了特定文本框中的文本。您可以使用下面的这两行来做到这一点:
*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',那么第一行将为 return 4,第二行将为 return 6。