python—web自动化(2)—日历控件,alter弹框处理(商城-个人中心,小案例)

 

  • 案例需求:
    1. 点击账号设置

    2. 点击个人资料

    3. 修改真实姓名

    4. 选择性别

    5. 输入生日

    6. 输入qq号

    7. 点击确定
  • 技术点:
    1. form表单里的元素,可以通过submit提交
    2. 通过css_select的方式,可以采用任意的属性定位
    3. 操作日历控件:
        1. 一次一次点击,选择年月日
        2. 可以删除readonly属性,再手动输入(javascript可以)
    4. 清空默认值:clear
    5. 弹出框的处理:alert
    6. 智能等待-显示等待

 

  • 浏览器设置代码:
    • from selenium import webdriver
      
      # 打开浏览器
      user_info_wdr = webdriver.Chrome()
      # 设置隐式等待
      user_info_wdr.implicitly_wait(10)
      # 设置窗口最大化
      user_info_wdr.maximize_window()

       

  • submit提交form表单:
    • 页面元素:
      • 代码:
        • # 输入账号密码
          user_info_wdr.find_element_by_id('username').send_keys('cs001')
          user_info_wdr.find_element_by_id('password').send_keys('123456')
          # 提交登录
          '''
          form表单可以使用submit方法,可以一次性提交所以表单元素
          submit能实现click效果,但只适用form表单
          '''
          user_info_wdr.find_element_by_id('password').submit()
  • 选择部分link_text进行定位
    • 页面元素:
      • 代码:
        • # 点击个人资料
          #user_info_wdr.find_element_by_link_text('个人资料').click()
          '''
          有时候链接文本会被图标隔断,无法通过完整的文本定位,此时可以使用
          by_partial_link_text方法,它支持部分文本定位
          '''
          user_info_wdr.find_element_by_partial_link_text('人资').click()
  • 通过css_selector的方式,使用属性定位:
    • 页面元素:
      • 代码:
        • # 修改真实姓名
          user_info_wdr.find_element_by_id('true_name').send_keys('今晚打老虎')
          # 选择性别
          '''
          css_selector可以采用任意属性来进行定位,使用时把属性放入中括号;
          性别单选框里每个选项的value值不同
          '''
          user_info_wdr.find_element_by_css_selector('[value="1"]').click()
  • 日历控件定位操作:
    • 页面元素:
      • 在控制台使用JavaScript删除readonly测试:

        • 截图:
        • 代码:
          • //document表示整个网页
            document.getElementById('date') //通过id获取日历控件
            
            
            //删除属性
            document.getElementById('date').removeAttribute('readonly')

             

      • 测试成功后,把代码复制到Python中,使用execute_script执行
      • 代码:
        • # 输入生日
          '''
          日历控件一个一个点击,比较麻烦也容易出错,所以使用新方法
          通过JavaScript删除属性,在使用send_keys进行输入
          '''
          # 删除属性
          script = 'document.getElementById("date").removeAttribute("readonly")'
          user_info_wdr.execute_script(script)
          
          # 手动输入生日
          '''生日框本来的内容需要清空,使用clear'''
          user_info_wdr.find_element_by_id('date').clear()
          # 清空后在输入
          user_info_wdr.find_element_by_id('date').send_keys('1999-06-06')
 
    • 输入qq号点击确认:
      • # 输入qq号
        user_info_wdr.find_element_by_id('qq').send_keys('123456789')
        
        # 点击确定
        user_info_wdr.find_element_by_css_selector('[value="确认"]').click()

         

 
  • 提交后页面效果:
    •  

  • 存在的问题:
    1. 第二次运行脚本后,姓名,qq,会追加内容,所以在输入内容前,需要使用clear清空
    2. 页面弹框无法获取元素,弹窗是Alert非网页元素,是JavaScript的控件:
        • selenium提供Alert处理方法:
          1. 点击确定按钮:webdriver.switch_to.alert.accept()
          2. 点击取消按钮:webdriver.switch_to.alert.dismiss()
          3. 获取弹框提示的文本信息:webdriver.switch_to.alert.text
    • 代码:
      • # 等待弹框出现
        time.sleep(2)
        
        # alert弹框处理:获取弹框信息
        alert_text = user_info_wdr.switch_to.alert.text
        print(alert_text) # 个人信息修改失败!,因为上面输入的信息写死了,对于系统来说没有发生改变,后续优化
        # alert弹框处理:点击确定
        user_info_wdr.switch_to.alert.accept()

 

  • 智能等待之显示等待
      • 概念:隐式等待是针对页面加载,alert弹窗的出现没有进行页面刷新加载,如果使用time等待,时长设置不那么合理
      • 用法:

      • # 设置显示等待
        # 导入WebDriverWait(传入浏览器对象,设置30s最大等待时间,每隔0.5s检查一次)
        # 导入expected_conditions(设置期望的条件,alert弹框出现)
        WebDriverWait(user_info_wdr,30,0.5).until(expected_conditions.alert_is_present())

         

posted @ 2023-01-14 20:45  沐沂  阅读(435)  评论(0)    收藏  举报