select 通过鼠标光标/键盘动作/动作的元素内文的一部分class
select a part of a innertext of an element through mouse cursor / keyboard action / Action class
如何 select 使用鼠标光标/键盘操作/操作从元素的内部文本中 select 特定单词(在本例中为“into force”)class。
我正在使用 Selenium(3.141.59) + Java (1.8) + Cucumber Framework + Selenium Grid (4)
你能不能请我说一下。
感谢和问候
萨蒂亚布拉塔
https://i.stack.imgur.com/pytUm.png
Select 带有 JavaScriptExecutor
的部分文本
这是关于如何 select 一些文本的纯 JavaScript 示例。
start
、end
是文本select离子范围的开始和结束坐标。
function selectText(element, start, end) {
selection = window.getSelection();
range = new Range();
range.setStart(element.childNodes[0], start);
range.setEnd(element.childNodes[0], end);
selection.removeAllRanges();
selection.addRange(range);
}
selectText(document.querySelector("#PageContent > h2:nth-child(7)"), 5, 20);
这应该使用 WebDriver 执行:
String jsScript = "function selectText(element, start, end) {\n" +
" selection = window.getSelection(); \n" +
" range = new Range();\n" +
" range.setStart(element.childNodes[0], start);\n" +
" range.setEnd(element.childNodes[0], end);\n" +
" selection.removeAllRanges();\n" +
" selection.addRange(range);\n" +
"}\n" +
"\n" +
"selectText(arguments[0], arguments[1], arguments[2]);";
WebElement someElementWithText = driver.findElement(...);
int start = 5;
int end = 20;
((JavascriptExecutor) driver).executeScript(jsScript, someElementWithText, start, end)
这将 select 从字母 5 到字母 20 的部分文本。
如果您喜欢 select 来自 some start text 且以 some end text 结尾的文本:
String fullText = someElementWithText.getText();
int start = fullText.indexOf("some start text");
int end = fullText.lastIndexOf("some end text") + "some end text".length();
Select 带有 WebDriver 操作的部分文本
这可能可以通过 Actions 链来解决,但是鼠标移动的坐标应该通过实验来定义。而且它高度依赖于元素宽度,浏览器 window 宽度,所以它不是很稳定。
但总的来说,这会起作用:
只是 x1
和 x2
应该根据您的要求定义。
x=0, y=0
- 是元素中心。
ChromeOptions options = new ChromeOptions();
WebDriver driver = new ChromeDriver(options);
driver.get("https://docs.oracle.com/javase/tutorial/essential/environment/env.html");
Thread.sleep(3000);
WebElement textContainer = driver.findElement(By.xpath("//h2[2]"));
int x1 = ...;
int x2 = ...;
new Actions(driver)
.moveToElement(textContainer, x1, 0)
.clickAndHold()
.moveToElement(textContainer, x2, 0)
.release()
.build().perform();
您可以尝试使其更加灵活,同时以编程方式获取元素:
int width = textContainer.getSize().getWidth();
并尝试相对于元素宽度定义 x1
、x2
,例如:
int x1 = -4*(width/10); // take 40% (of the full width) to the left from elements center
int x2 = -5*(width/100); // take 5% to the left from elements center
如何 select 使用鼠标光标/键盘操作/操作从元素的内部文本中 select 特定单词(在本例中为“into force”)class。
我正在使用 Selenium(3.141.59) + Java (1.8) + Cucumber Framework + Selenium Grid (4)
你能不能请我说一下。
感谢和问候 萨蒂亚布拉塔
https://i.stack.imgur.com/pytUm.png
Select 带有 JavaScriptExecutor
的部分文本这是关于如何 select 一些文本的纯 JavaScript 示例。
start
、end
是文本select离子范围的开始和结束坐标。
function selectText(element, start, end) {
selection = window.getSelection();
range = new Range();
range.setStart(element.childNodes[0], start);
range.setEnd(element.childNodes[0], end);
selection.removeAllRanges();
selection.addRange(range);
}
selectText(document.querySelector("#PageContent > h2:nth-child(7)"), 5, 20);
这应该使用 WebDriver 执行:
String jsScript = "function selectText(element, start, end) {\n" +
" selection = window.getSelection(); \n" +
" range = new Range();\n" +
" range.setStart(element.childNodes[0], start);\n" +
" range.setEnd(element.childNodes[0], end);\n" +
" selection.removeAllRanges();\n" +
" selection.addRange(range);\n" +
"}\n" +
"\n" +
"selectText(arguments[0], arguments[1], arguments[2]);";
WebElement someElementWithText = driver.findElement(...);
int start = 5;
int end = 20;
((JavascriptExecutor) driver).executeScript(jsScript, someElementWithText, start, end)
这将 select 从字母 5 到字母 20 的部分文本。
如果您喜欢 select 来自 some start text 且以 some end text 结尾的文本:
String fullText = someElementWithText.getText();
int start = fullText.indexOf("some start text");
int end = fullText.lastIndexOf("some end text") + "some end text".length();
Select 带有 WebDriver 操作的部分文本
这可能可以通过 Actions 链来解决,但是鼠标移动的坐标应该通过实验来定义。而且它高度依赖于元素宽度,浏览器 window 宽度,所以它不是很稳定。
但总的来说,这会起作用:
只是 x1
和 x2
应该根据您的要求定义。
x=0, y=0
- 是元素中心。
ChromeOptions options = new ChromeOptions();
WebDriver driver = new ChromeDriver(options);
driver.get("https://docs.oracle.com/javase/tutorial/essential/environment/env.html");
Thread.sleep(3000);
WebElement textContainer = driver.findElement(By.xpath("//h2[2]"));
int x1 = ...;
int x2 = ...;
new Actions(driver)
.moveToElement(textContainer, x1, 0)
.clickAndHold()
.moveToElement(textContainer, x2, 0)
.release()
.build().perform();
您可以尝试使其更加灵活,同时以编程方式获取元素:
int width = textContainer.getSize().getWidth();
并尝试相对于元素宽度定义 x1
、x2
,例如:
int x1 = -4*(width/10); // take 40% (of the full width) to the left from elements center
int x2 = -5*(width/100); // take 5% to the left from elements center