Selenium单选框、勾选框、复选框操作详解

发表于:2022-12-09 09:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:CSDN

  webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用findElements方法。
  1、单选框和多选框
  我们可以自己写一个简单的页面,该文件保存格式为名称.html,在操作的过程中我把html文件和python文件放在了同一级目录下;
  box.html代码如下:
  <html>
      <head>
          <meta http-equiv="content-type" content="text/html;charset=utf-8" />
          <title>Checkbox</title>
          <script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
          <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
          <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
      </head>
      <body>
          <h3>模拟测试</h3>
          <div class="well">
              <form class="form-horizontal">
                  <div class="control-group">
                      <label class="control-label" for="c1">喝酒</label>
                      <div class="controls">
                          <input type="checkbox" id="c1" />
                      </div>
                  </div>
                  <div class="control-group">
                      <label class="control-label" for="c2">上网</label>
                      <div class="controls">
                          <input type="checkbox" id="c2" />
                      </div>
                  </div>
                  <div class="control-group">
                      <label class="control-label" for="c3">睡觉</label>
                      <div class="controls">
                          <input type="checkbox" id="c3" />
                      </div>
                  </div>
   
                  <div class="control-group">
                      <label class="control-label" for="r">男</label>
                      <div class="controls">
                          <input type="radio" id="r1" />
                      </div>
                  </div>
   
                  <div class="control-group">
                      <label class="control-label" for="r">女</label>
                      <div class="controls">
                          <input type="radio" id="r2" />
                      </div>
                  </div>
              </form>
          </div>
      </body>
  </html>
  python代码如下:
  from selenium import webdriver
  import time
  import os
  driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
  #os.getcwd():当前Python文件所在的路径,没有\需要加上os.sep
  file_path =  os.getcwd()+os.sep+'box.html'
  print(file_path)
  driver.get(file_path)
  # 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之
  inputs = driver.find_elements_by_tag_name('input')
  for input in inputs:
      if input.get_attribute('type') == 'checkbox':
          input.click()
  time.sleep(2)
  driver.quit()
  学到这个阶段的同学应该也都已经对CSS选择器有所了解,下面我们使用CSS选择器来实现和上述一样的效果,代码如下:
  from selenium import webdriver
  import time
  import os
  driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
  file_path =  os.getcwd()+os.sep+'box.html'
  print(file_path)
  driver.get(file_path)
  checkboxs = driver.find_elements_by_css_selector('input[type="checkbox"]')
  for checkbox in checkboxs:
      checkbox.click()
  time.sleep(3)
  如果想要取消最后一个勾选可以加上代码:
  driver.find_elements_by_css_selector('input[type="checkbox"]').pop().click();
  上面代码只演示了多选框,如果想要操作单选框,把checkbox改成radio即可;
  有些同学会提出疑问,想要取消第一个第二个该如何操作呢,我的想法是用is_selected方法来获取选择的状态,如果true,就再次点击一下;如果有些同学有更好的解决方法,欢迎留言!
  2、复选框
  和上述操作一样,为了方便演示,先编写一个html文件:
  <html>
      <head>
          <meta http-equiv="content-type" content="text/html;charset=utf-8" />
          <title>Checkbox</title>
          <script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
          <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
          <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
      </head>
  <p>选择您喜爱的车</p>
  <select id="multi" multiple>
      <option value="benc">奔驰S300</option>
      <option value="yage">雅阁</option>
      <option value="BMW" selected="selected">宝马</option>
      <option value="aodi">奥迪</option>
  </select>
  <p>选择性别</p>
  <select id="single">
      <option value="male">男</option>
      <option value="female" selected="selected">女</option>
  </select>
  python编写需要先导如Select类:from selenium.webdriver.support.ui import Select;注意Select类只适用于元素必须是select类型的;
  # 先使用deselect_all把勾选的全部去掉
  # 然后在用select_by_visible_text 进行勾选
   
  # 获取对应的element
  time.sleep(2)
  select = Select(driver.find_element_by_xpath('//*[@id="multi"]'))
   
  #先去掉所有选择的项
  time.sleep(2)
  select.deselect_all()
   
  #然后选择
  time.sleep(2)
  select.select_by_visible_text('雅阁')
  select.select_by_visible_text('奥迪')
   
  # 如果是单选框就直接用
  select.select_by_visible_text('男')
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号