macaca icon indicating copy to clipboard operation
macaca copied to clipboard

Macaca web 测试 react 时,输入框 sendkey 之后输入内容会消失 (java)

Open dasu23 opened this issue 7 years ago • 3 comments

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);})();");

有人遇到过类似的问题吗,有没有更好的解决办法?

dasu23 avatar Dec 05 '17 10:12 dasu23

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();

image

sendkey这个note之后,点击下面submit按钮,输入的内容就消失了 @Chan-Chun

dasu23 avatar Dec 12 '17 08:12 dasu23

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);
    }
}

dasu23 avatar Jan 26 '18 02:01 dasu23

@xujiewei23 试试 https://testerhome.com/topics/12254

xudafeng avatar Mar 11 '18 06:03 xudafeng

问题已解决,如有其他问题,可再次提issue并提供详细环境信息&复现路径

yihuineng avatar Oct 20 '23 08:10 yihuineng