zoukankan      html  css  js  c++  java
  • selenium3+python自动化9-JS增加、删除、修改HTML元素属性

    一、前言

    这节主要是总结JS代码对HTML元素的增、删、改内容。因为它可以帮助我们解决很多实际问题,比如:打开多个窗口的时候,之前讲过用switch_to进行窗口之间的切换(selenium3+python自动化7-switch_to总结),但是切换比较麻烦。想要让新打开的链接在一个窗口打开,就需要修改元素的target属性才能解决。在测试的时候,会遇到有的日期输入框无法直接输入,需要点开日历控件弹框,从日历控件上点日期,这样比较繁琐,想要直接输入日期,就要删除元素中限制输入的属性(readonly),显然JS在这方面就很厉害。

    用JS添加删除或者修改html元素的时候只是在浏览器解析的时候后将其删除或添加,而源代码是不会改变的,页面中本来有什么元素还是会有的。

    二、常见操作

    #给id为nice的元素 增加 title属性并赋值为“测试title”
    js='document.getElementById("nice").setAttribute("title","测试title")'
    #给id为nice的元素 删除 title属性
    js='document.getElementById("nice").removeAttribute("title")'
    #获取id为nice的元素 title属性的值
    js='document.getElementById("nice").getAttribute("title")'
    #修改id为nice的元素 title属性的值
    js='document.getELementById("nice").title="测试"'

    JS除了用id定位外,还可以用class来定位元素,值得注意的是:js用class属性定位,返回的是一个list对象,在使用的时候需要加上索引值,中间单词是elements。例如:js='documen.getElementsByClassName("good")[0].setAttribute("title","测试title")' class为good的第一个元素增加title属性并赋值为“测试title”

    三、实际应用

    1.修改元素属性:以百度为例,点击登录页面的立即注册,页面会打开一个新的窗口,原因是:“立即注册”链接元素属性target="_blank"导致。让链接在一个窗口打开就要修改target属性的值为空。

    代码如下:

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')
    driver.find_element_by_link_text("登录").click()
    sleep(1)
    #定位“立即注册”位置,修改target属性值为空,让新打开的链接显示在同一个窗口
    js='document.getElementsByClassName("pass-reglink pass-link")[0].target=""'
    driver.execute_script(js)#执行js语句
    driver.find_element_by_link_text("立即注册").click()
    sleep(3)
    driver.quit()

    2.去掉元素属性:以12306的车票查询界面为例,出发日期输入框无法直接输入时间,因为元素的属性是readonly,需要先去掉属性,才可以输入。

     代码如下:

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.12306.cn/index/')
    sleep(2)
    #js去掉属性
    js='document.getElementById("train_date").removeAttribute("readonly")'
    driver.execute_script(js)
    #方式一:通过send_keys()输入值
    # driver.find_element_by_id("train_date").clear()
    # driver.find_element_by_id("train_date").send_keys('2020-08-20')
    #方式二:js修改属性的值
    js='document.getElementById("train_date").value="2019-01-12"'
    driver.execute_script(js)
    sleep(2)
    driver.quit()
  • 相关阅读:
    php单例设计模式
    js实用技巧
    快速排序java实现
    PHP大小写问题
    http转https
    wx-charts 微信小程序图表插件
    如何判断微信内置浏览器 MicroMessenger
    小程序:下拉加载更多时bindscrolltolower多次执行
    PHP内核
    CSS的4种引入方式以及优先级
  • 原文地址:https://www.cnblogs.com/xiaobeibi/p/12337461.html
Copyright © 2011-2022 走看看