Ich habe einen Web-App reagieren mit und ich versuche, einige Tests mit Selenium RC zu erstellen. Ich stelle jedoch fest, dass Ereignisse, wenn Selenium die Werte von Feldern ändert, nicht richtig ausgelöst werden. Ich weiß, dass dies ein etwas typisches Problem ist, wie durch die WebDriver FAQ bewiesen und ich habe ein paar verschiedene Dinge versucht, wie mit onFocus statt onChange und sicherstellen, dass der Fokus in geändert wurde und aus, mit Sendkeys() vs Typ(), programmatisch Ich habe die Veranstaltung angerufen, und alle anderen Vorschläge, die ich online finden konnte, aber ich konnte es nicht funktionieren.Wie testen Sie eine reactjs Web App mit Selen?
Als einfaches Beispiel dafür, was ich versuche, das Kommentarfeld reagieren Beispiel zu tun, zog ich nach unten. Was ich habe, ist ein Textfeld Eingabefeld und ein Div, das mit dem Wert der Textarea aktualisiert werden sollte. Selen kann das Textarea aktualisieren, aber wenn es das tut, ändert sich das Div nicht.
Hier ist mein reactjs Code:
/** @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'));
Und hier ist mein aktueller Selenium Testfall:
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);
}
}
bearbeiten: Code auf jetzt verfügbar ist https://github.com/ilionblaze/reactTest
Es muss ein Weg zu machen diese Arbeit!
Anrufe reagieren onChange [wenn die Textfeld Wertänderungen] (http://facebook.github.io/react/docs/forms.html), wenn nicht nur das native onChange Ereignis ausgelöst wird, so dass der Fokus und Unschärfe Code sollte keine Wirkung haben. Ich würde vermuten, dass React zu dem Zeitpunkt, an dem der selen.getText-Aufruf erfolgt, nicht erneut gerendert wurde - haben Sie versucht, einen Breakpoint in die render-Methode einzufügen? – Douglas
Ich weiß nicht, ob das immer noch ein Problem ist, aber haben Sie erwogen, Selenium WebDriver zu verwenden? Selenium RC wurde in wahrscheinlich über einem Jahr, wahrscheinlich mehr, nicht aktualisiert. – SiKing