macaca
macaca copied to clipboard
Macaca web 测试 react 时,输入框 sendkey 之后输入内容会消失 (java)
Macaca web测试react时,输入框sendkey之后会消失 前端开发的反馈是,使用sendkey时,并没有触发onchange事件,
目前我的解决方法时,先使用sendkey传入值,再使用execute方法传入一段js,通过触发这段js去触发事件 driver.execute("(function() {var evt = new Event('input', { bubbles: true });evt.simulated = true;document.getElementById('id').dispatchEvent(evt);})();");
有人遇到过类似的问题吗,有没有更好的解决办法?
driver.get("https://ant.design/components/form-cn/"); driver.waitForElementById("note").sendKeys("note"); driver.sleep(1000); driver.waitForElementByXPath("//*[@id="components-form-demo-coordinated"]/section[1]/form/div[3]/div/div/button").click();
sendkey这个note之后,点击下面submit按钮,输入的内容就消失了 @Chan-Chun
react升级之后,之前使用js触发onchange事件已经没有效果了,找到了另外一个方法,通过js直接将value 传入输入框内 实现功能的js如下: (function triggerInputChange(node, value) { var setValue = Object.getOwnPropertyDescriptor( window.HTMLInputElement.prototype, 'value' ).set; var event = new Event('input', { bubbles: true }); setValue.call(node, value); node.dispatchEvent(event); })(document.getElementById('searchValue'), 'test');
使用java封装了一个方法,可以完全替代之前的sendkey
public void setInputValueBySelector(String selector, String value) {
try {
String js = "(function (node,value){var setValue=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set;"
+ "var event=new Event('input',{bubbles:true});setValue.call(node,value);node.dispatchEvent(event)})(document.querySelector('%s'),'%s');";
this.execute(String.format(js, selector, value));
} catch (Exception e) {
// TODO: handle exception
ResultGenerator.catchedException(e);
}
}
@xujiewei23 试试 https://testerhome.com/topics/12254
问题已解决,如有其他问题,可再次提issue并提供详细环境信息&复现路径