我有一个使用React的网络应用程序,我正在尝试使用Selenium RC创建一些测试。我发现,当Selenium更改字段值时,事件未被正确触发。我知道这是一个典型的问题,如WebDriver FAQ所证明的那样,我尝试过一些不同的东西,比如使用onFocus而不是onChange,并确保使用sendKeys()vs type对焦点进行更改。 (),以编程方式调用该事件,以及我可以在网上找到的任何其他建议,但我无法使其正常工作。
作为我正在尝试做的一个简单示例,我删除了评论框反应示例。我有一个textarea输入框和一个div应该用textarea的值更新。 Selenium可以更新textarea,但是当它发生时div不会改变。
这是我的reactjs代码:
/** @jsx React.DOM */
var MarkdownEditor = React.createClass({
getInitialState: function() {
return {value: 'Original Text'};
},
handleChange: function() {
this.setState({value: this.refs.textarea.getDOMNode().value});
},
render: function() {
return (
<div className="MarkdownEditor">
<h3>Input</h3>
<textarea
onChange={this.handleChange}
ref="textarea"
defaultValue={this.state.value} />
<h3>Output</h3>
<div
className="content"
id="content2",
dangerouslySetInnerHTML={{
__html: this.state.value
}}
/>
</div>
);
}
});
React.renderComponent(<MarkdownEditor />, document.getElementById('content'));
这是我目前的Selenium测试案例:
import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.regex.Pattern;
import java.util.Properties;
import junit.framework.TestCase;
public class textTest extends TestCase {
protected Selenium selenium;
@Before
public void setUp() throws Exception {
Properties sysProps = System.getProperties();
String browser = sysProps.getProperty("browser.property");
selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://localhost/");
selenium.start();
}
@After
public void tearDown() throws Exception {
selenium.stop();
}
@Test
public void testText() throws Exception {
selenium.open("/reactTest/index.html");
assertEquals("Original Text", selenium.getText("id=content2"));
selenium.focus("id=content2");
selenium.type("css=textarea[value=\"Original Text\"]", "xxxxx");
selenium.focus("id=content");
selenium.runScript("$('#tatest').trigger('change')");
assertEquals("xxxxxOriginal Text", selenium.getText("id=content2"));
Thread.sleep(80000);
}
}
编辑:代码现已在https://github.com/ilionblaze/reactTest
处提供必须有一些方法来完成这项工作!
答案 0 :(得分:3)
在React TestUtils插件中尝试模拟:
React.addons.TestUtils.Simulate.change(document.getElementById('your-id-here'))
请参阅http://facebook.github.io/react/docs/test-utils.html#simulate
它还要求您切换到包含插件的React文件:
&#34;要获取附加组件,请使用react-with-addons.js(及其缩小版本) 对应的)而不是常见的react.js。&#34; - http://facebook.github.io/react/docs/addons.html
答案 1 :(得分:0)
import ReactTestUtils from 'react-addons-test-utils' // ES6
var ReactTestUtils = require('react-addons-test-utils') // ES5 with npm
var ReactTestUtils = React.addons.TestUtils; // ES5 with react-with-addons.js
将它包装在python库中并将其加载到RF ...中 希望它能奏效。