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

1 投票
2 回答
1141 浏览
提问于 2025-04-18 15:13

问题

在使用Selenium自动化浏览器时,如何正确点击一个用Bootstrap的JavaScript按钮创建的单选按钮?

背景

我正在开发一个Web应用,使用的是Django v1.7和Bootstrap v3.2.0,并通过Selenium进行功能测试。有些HTML页面上有用Bootstrap的JavaScript按钮创建的单选按钮。

<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>

我可以选择想要的单选按钮,输入序列号,然后在通过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())

2 个回答

0

假设你在一个页面上有两个单选按钮,它们的名字是“gender”,值分别是‘F’(女性)和‘M’(男性)。你应该这样使用选择方法:

browser.choose('gender', 'F')
0

我把Selenium的浏览器从Firefox换成Chrome时,发现Selenium需要实际点击输入框的父元素。我觉得这是因为输入框被包裹在标签里面,但我不太确定。

因为我在输入框上有一个ID,所以我找到的最简单的方法是这样的:

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

撰写回答