使用React和Ajax测试Django的硒

2024-09-30 03:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django应用程序,它使用React创建新闻提要组件。当React Newsfeed组件挂载时,它对djangoapi进行ajax调用以获取当前用户,并将新帖子的作者设置为当前用户。以下是React组件的新表单:

var NewPost = React.createClass({
  getInitialState: function() {
    return {
      author: 'Default Author'
    }
  },
  getUser: function() {
    $.ajax({
      url: this.props.url + "user/",
      dataType: 'json',
      method: 'GET',
      success: function(data){
        this.setState({author: data.fields.first_name});
      }.bind(this),
      error: function(xhr, status, err) {
        console.error("Error with API", status, err.toString());
      }.bind(this)
    })
  },
  componentDidMount: function(){
    this.getUser();
  },
  handleSubmit: function(event) {
    event.preventDefault();
    var author = this.state.author;
    var content = React.findDOMNode(this.refs.content).value.trim();
    if (!content) {
      return;
    }
    this.props.onPostSubmit({author: author, content: content});
    React.findDOMNode(this.refs.content).value = '';
    return;
  },
  render: function() {
    return (
      <div className="panel panel-default">
        <div className="panel-body">
          <form onSubmit={this.handleSubmit}>
            <div className="form-group">
              <textarea className="form-control" ref="content" placeholder="Whats Up" rows="3" id="newpost-input" />
              <br/>
              <input type="submit" className="btn btn-primary" id='newpost-submit' value="Submit" />
            </div>
          </form>
        </div>
      </div>
    )
  }
});

当我手动测试这段代码时,一切都按它应该的方式工作。我登录,发表一篇文章,我的名字显示为文章的作者。但是,当我使用Selenium测试这一点时,作者是“默认作者”;它不会被更改。在我的Selenium测试中,我用我的登录凭证登录到我的应用程序,一切正常,除了帖子的作者没有从“默认作者”改为我的名字。在

起初,我认为Selenium在ajax调用完成之前就已经完成了它的工作。所以我在Selenium测试中增加了一些等待时间,但是作者的名字从来没有改变过。你知道为什么ajax调用不起作用吗?在

更新 以下是相关的硒代码:

^{pr2}$

我知道使用我的凭据登录是成功的,因为我将{{user}}添加到django模板中,并向selenium测试添加了一个print语句以打印正文文本,{{user}}将正确显示为我的用户名。在

我做的另一个测试是看react函数componentDidMount是否被调用。在componentDidMount函数中,我执行了以下操作:

componentDidMount: function() {
    console.log("component mounting");
    this.getUser();
    console.log("component mounted");
},

除此之外,我还将console.log添加到getUserajax调用的success和{}函数中。来自componentDidMount函数的console.log起作用,但是ajax调用中的console.logs不起作用。在


Tags: 函数divformreturnseleniumajaxfunction作者

热门问题