• Python —— UI自动化之使用JavaScript进行元素点亮、修改、点击元素


    1、JavaScript点亮元素

    在控制台通过JavaScript语言中对元素点亮效果如下:

     将这个语句和UI自动化结合,代码如下:

    1. locator = (By.ID,"kw") # 是元组类型
    2. web_element = WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(locator))
    3. driver.execute_script("arguments[0].style.backgroundColor='yellow'",web_element)

    进阶代码:

    1. # 写一个函数
    2. def wait_element_visibility(locator):
    3. web_element = WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(locator))
    4. driver.execute_script("arguments[0].style.backgroundColor='yellow'",web_element)
    5. return web_element
    6. '''知识一:对元素进行高亮展示'''
    7. driver = webdriver.Chrome()
    8. driver.get("https://www.baidu.com/")
    9. driver.maximize_window()
    10. # 调用函数
    11. element1 = wait_element_visibility((By.ID,"kw"))

    2、JavaScript修改元素

    1、JavaScript设置和移除元素概述

    修改元素主要体现在设置和移除元素中,如下:

            设置属性:setAttribute

            移除属性:removeAttribute
    使用 JavaScript设置元素举例说明:

     使用JavaScript移除元素举例说明:

     

    2、Python中执行设置元素
    1. def wait_element_visibility(locator):
    2. web_element = WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(locator))
    3. driver.execute_script("arguments[0].style.backgroundColor='yellow'",web_element)
    4. return web_element
    5. '''知识一:对元素进行高亮展示'''
    6. driver = webdriver.Chrome()
    7. driver.get("https://www.baidu.com/")
    8. driver.maximize_window()
    9. element1 = wait_element_visibility((By.ID,"kw"))
    10. '''知识二:对元素进行移除'''
    11. # driver.execute_script('arguments[0].removeAttribute("maxlength")',element1)
    12. # sleep(2)
    13. '''知识三:对元素进行设置,成功了'''
    14. driver.execute_script("argument[0].setAttribute('maxlength','600')",element1)
    3、Python中执行移除元素 

    使用场景:通过JavaScript去掉元素的属性 readonly(只读属性),因为去掉它之后,才可以修改输入框的值

    1. driver.get("http://www.lvmama.com/")
    2. driver.maximize_window()
    3. wait_element_clickable((By.XPATH,"//li[contains(text(),'度假酒店')]")).click()
    4. element = wait_element_visibility((By.XPATH,'//div[contains(@class,"nova-ui-date-range-start")]/input'))
    5. # 执行Javascript脚本,移除只读元素
    6. driver.execute_script("arguments[0].removeAttribute('readonly')",element)
    7. # 使用键盘操作清理数据
    8. sleep(2)
    9. element.send_keys(Keys.CONTROL,"a") # 键盘操作-全选
    10. element.send_keys(Keys.BACK_SPACE) # 键盘操作-清空
    11. element.send_keys("2023-11-11") # 写入元素

    3、JavaScript点击元素

    1、概述

    使用场景:使用selenium的click()方法去点击一些按钮时,会出现: Element is not clickable at pointOther element would receive the click 提示,为了解决这个问题,可以使用JavaScript的点击解决,语法如下:

    1. element = driver.find_element(By.XPATH,'//button[contains(@class,"el-button--
    2. primary")]')
    3. driver.execute_script('arguments[0].click()',element)
    2、Python实现点击元素
    1. driver = webdriver.Chrome()
    2. driver.maximize_window()
    3. driver.get('https://www.XXXXXXXXXXX.com/#/login')
    4. wait_element_visibility((By.XPATH,'//input[@placeholder="请输入邮箱/手机号/账号"]')).send_keys('13323234545')
    5. wait_element_visibility((By.XPATH,'//input[@placeholder="请输入密码"]')).send_keys('13323234545')
    6. # 执行以下的语句,会提示:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (991, 385). Other element would receive the click:
    7. # (Session info: chrome=118.0.5993.71)
    8. #元素点击中断异常,目标元素点击事件被上层元素消费掉,所以目标元素不能点击了
    9. # wait_element_clickable((By.CLASS_NAME,'el-button--primary')).click()
    10. # 使用JavaScript的点击方法进行解决
    11. element= wait_element_clickable((By.CLASS_NAME,'el-button--primary'))
    12. driver.execute_script("arguments[0].click()",element) # 成功

    JavaScript总结

    1、页面的滚动/内嵌滚动条滚动
    document.documentElement.scrollTop = 200
    先要去找到内嵌滚动条元素,再去进行滚动

    2、修改元素的属性(删掉/改变元素的属性)
            removeAttribute()
            setAttribute()

    点击操作总结(3种方式)

    1、click()
    2、鼠标 ActionChains(driver).click(目标元素).perform()
    3、通过JavaScript来进行点击

  • 相关阅读:
    Linux:非常实用的Linux命令
    qt报错Project ERROR: Cannot run compiler ‘cl‘. Output:
    贝叶斯自举法Bayesian Bootstrap
    Excel怎么批量生成文件夹
    Dubbo架构篇 - 服务路由
    Python数据类型——字典(Dictionary)
    黑猫带你学UFS协议栈第2篇:DME reset详解
    数据结构与算法-第八章 交换排序
    从系统设计到撸代码?我用了这些方法和工具
    Webrtc源码编译之个人仓库
  • 原文地址:https://blog.csdn.net/lzf_hlh/article/details/133970102