在Python中使用Selenium单击Bootstrap JavaScript单选按钮

时间:2014-07-29 18:38:47

标签: python django twitter-bootstrap selenium

问题

通过Selenium运行浏览器时,点击使用Bootstrap的JavaScript按钮创建的单选按钮的正确方法是什么?

背景

我正在使用Django v1.7和Bootstrap v3.2.0开发WebApp,并使用Selenium执行功能测试。某些HTML页面具有使用Bootstrap's JavaScript buttons创建的单选按钮。

<form class="form-horizontal well" role="form" method="POST">
  <div class="row">
    <div class="btn-group btn-group-justified" data-toggle="buttons">
      <label class="btn btn-primary">
        <input type="radio" name="selected_test" value="loop_on_failure"
          id="id_loop_on_failure" />Loop on Failure
      </label>
      <label class="btn btn-primary">
        <input type="radio" name="selected_test" value="test_until_failure"
          id="id_test_until_failure" />Test Until Failure
      </label>
    </div>
  </div>
  <div class="row">
    <div class="col-lg-6 col-lg-offset-3">
      <div class="input-group">
        <input type="text" class="form-control" autofocus name="serial_number"
          id="id_serial_number" placeholder="Enter Serial Number">
        {% csrf_token %}
        <span class="input-group-btn">
          <button class="btn btn-primary" id="id_run_test" type="submit">
            Test Board
          </button>
        </span>
      </div>
    </div>
  </div>
</form>

我可以选择所需的单选按钮,输入S / N,并在通过Django的manage.py runserver运行时按“测试板”按钮。但是,当我运行如下的功能测试时,我收到错误。更具体地说,POST数据不包含selected_test键,这使我相信Selenium实际上没有点击单选按钮。

browser = webdriver.Firefox()
browser.find_element_by_id('id_test_until_failure').click()
self.assertTrue(browser.find_element_by_id(
    'id_test_until_failure').is_selected())

1 个答案:

答案 0 :(得分:0)

通过将Selenium webdriver从Firefox切换到Chrome,我发现Selenium需要实际点击输入标签的父级。我相信这是由于输入标签被包裹在标签标签内部,但我不确定。

鉴于我在输入标签上有一个id,我发现这样做的最简单方法如下:

browser.find_element_by_id(
    'id_test_until_failure').find_element_by_xpath('..').click()