反应 - 硒测试

时间:2016-02-25 13:46:56

标签: javascript selenium reactjs

已解决,请参阅下面的答案

我用selenium测试React应用程序。

我需要更改输入字段的值,该字段链接到对象的状态。简而言之(代码的相关部分),此输入的更改允许仅在非空时才提交值:

# react object

render: function(){

    <input ... onChange={this.handleTextChange} className="myInput" />

    <button onClick={this.handleSubmit}>Submit</button> 
},

handleTextChange: function(e) {
    this.setState({text: e.target.value});
},

handleSubmit: function() {
    if(this.state.text.length > 0) {
    // relevant code that is never executed
    // because although we change the value of the input, the state does not update 
    }
},

代码有效但我找不到测试它的方法,因为我找不到任何js操作,它会更新输入并反映在对象的状态。 我尝试了以下解决方案

# value update
self.selenium.execute_script("var input = document.querySelectorAll('input.myInput')[0]; form.value = 'New message!'");

“新消息!”实际上出现在输入中但不更新对象的状态。 然后我尝试着重于输入并触发一个keyup事件,但没有成功

# try focus and keyUp
# source https://stackoverflow.com/questions/596481/simulate-javascript-key-events
self.selenium.execute_script("""
var form = document.querySelectorAll("input.messageFormInput")[0]; 
form.focus();
var keyboardEvent = document.createEvent("KeyboardEvent");
var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
keyboardEvent[initMethod](
               "keydown", // event type : keydown, keyup, keypress
                true, // bubbles
                true, // cancelable
                window, // viewArg: should be window
                false, // ctrlKeyArg
                false, // altKeyArg
                false, // shiftKeyArg
                false, // metaKeyArg
                40, // keyCodeArg : unsigned long the virtual key code, else 0
                0 // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
);
document.dispatchEvent(keyboardEvent);
""")

我尝试了与jQuery相同的解决方案,如此处所述(Is it possible to simulate key press events programmatically?),但它也不起作用。

任何想法都非常受欢迎。谢谢!

1 个答案:

答案 0 :(得分:1)

我的坏,我不知道

self.selenium.find_elements_by_class_name('myClass')[0].send_keys("hello")

这实际上解决了这个问题。感谢Chris Hawkes让我朝着正确的方向前进。