2014-04-28 25 views
6

Tôi có một ứng dụng web bằng React và tôi đang cố gắng tạo một số thử nghiệm bằng cách sử dụng Selenium RC. Tôi đang tìm kiếm mặc dù khi Selen thay đổi các giá trị của các trường, các sự kiện không được kích hoạt đúng cách. Tôi biết đây là một vấn đề điển hình được minh chứng bởi WebDriver FAQ và tôi đã thử nhiều thứ khác nhau như sử dụng onFocus thay vì onChange và đảm bảo tiêu điểm được thay đổi vào và ra, sử dụng sendKeys() vs type(), theo chương trình gọi sự kiện và bất kỳ đề xuất nào khác mà tôi có thể tìm thấy trực tuyến, nhưng tôi đã không thể làm cho nó hoạt động.Làm thế nào để bạn kiểm tra ứng dụng web reactjs bằng selen?

Như một ví dụ đơn giản về những gì tôi đang cố gắng thực hiện, tôi đã loại bỏ ví dụ phản hồi về hộp nhận xét. Những gì tôi có là một hộp nhập văn bản và một div cần được cập nhật với giá trị của vùng văn bản. Selenium có thể cập nhật textarea, nhưng khi nó không thay đổi.

Đây là mã reactjs tôi:

/** @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')); 

Và đây là hiện trường hợp thử nghiệm Selenium tôi:

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

} 

Chỉnh sửa: Mã bây giờ đã có tại https://github.com/ilionblaze/reactTest

Phải có một số cách để làm cho công việc này!

+1

Cuộc gọi phản ứng bậtThay đổi [bất cứ khi nào giá trị hộp văn bản thay đổi] (http://facebook.github.io/react/docs/forms.html), không chỉ khi sự kiện onChange gốc được kích hoạt, do đó mã lấy nét và làm mờ không nên có hiệu lực. Tôi đoán rằng React đã không được trả lại bởi thời gian mà lệnh gọi 'selenium.getText' được tạo ra - bạn đã thử đặt một điểm ngắt trong phương thức render chưa? – Douglas

+2

Bạn không biết đây có phải là vấn đề hay không, nhưng bạn đã cân nhắc sử dụng Selenium WebDriver chưa? Selenium RC chưa được cập nhật trong hơn một năm, có lẽ nhiều hơn nữa. – SiKing

Trả lời

3

Hãy thử Simulate trong Phản ứng TestUtils addon:

React.addons.TestUtils.Simulate.change(document.getElementById('your-id-here')) 

Xem http://facebook.github.io/react/docs/test-utils.html#simulate

Nó cũng đòi hỏi bạn nên chuyển sang các tập tin Phản ứng có chứa các addons:

"Để có được add -ons, sử dụng react-with-addons.js (và minđã được rút gọn) thay vì phản ứng phổ biến.js. " - http://facebook.github.io/react/docs/addons.html

+1

Xin chào MPV, câu trả lời của bạn cho tôi một đầu mối về cách thử nghiệm ứng dụng phản ứng, tuy nhiên làm cách nào tôi có thể nhập hoặc tải tệp Testutils Js phản ứng khi tôi đang sử dụng khung robot với ngôn ngữ python. – Ziwdigforbugs

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 

bọc rằng trong một thư viện python và tải nó trong RF ...
Hy vọng rằng nó sẽ làm việc.

Các vấn đề liên quan