我想使用WebDriver在浏览器屏幕中选择一行文本(实际上在CKEditor编辑区域中),然后从CKEditor工具栏更改其文本样式。任何方法都可以做到吗?
例如,带有html代码的行如下所示:
这是一个示例行。
我尝试使用Actions来构建鼠标动作链,但由于不熟悉它而没有成功。感谢任何提示或答案。
答案 0 :(得分:1)
我不确定WebDriver实际上是否可行。你想要做的是clickAndHold(...).moveByOffset(...).release(...)
。不幸的是,WebDriver只允许WebElement
作为clickAndHold()
的参数。
我最好的建议是为此模拟JavaScript事件。然后,您可以在测试中执行以下操作:
((JavascriptExecutor) driver).executeScript(...);
我编写了用于模拟鼠标事件的代码,我使用了一些Selenium测试。虽然它并没有完全符合您的要求,但希望它有用(希望您可以设置x / y坐标,也许这样可以使它工作):
var f = function() {
var id = "ext-gen1116";
var top = document.querySelector( '#ext-gen1116:nthchild(0)' );
var bot = document.getElementById( id ).childNodes[3];
var getX = function( obj ) {
if( obj == null ) {
return 0;
} else {
return obj.offsetLeft + getX( obj.offsetParent );
}
}
var getY = function( obj ) {
if( obj == null ) {
return 0;
} else {
return obj.offsetTop + getY( obj.offsetParent );
}
}
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("mousedown", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
bot.dispatchEvent(evt);
evt = document.createEvent("MouseEvents");
evt.initMouseEvent("mousemove", true, true, window,
0, 0, 0, getX( top ) - getX( bot ), getY( top ) - getY( bot ),
false, false, false, false, 0, null);
bot.dispatchEvent(evt);
var mouseup = function( elem ) {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("mouseup", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent(evt);
}
setTimeout( mouseup, 500, bot );
};
f();
如果你可以用键盘做你想做的事,那么这是迄今为止更好的解决方案。你可以简单地做driver.sendKeys(...)
。在这种情况下,Keys枚举对你来说是无价的: - )
答案 1 :(得分:0)
您也可以尝试使用JavaScript:
let el = document.querySelectorAll("p")[0];
let range = document.createRange();
range.selectNodeContents(el);
window.getSelection().addRange(range);