使用Python中的Selenium单击Bootstrap JavaScript单选按钮
问题
在使用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()