2020-08-21日36---js操作和文件上传操作(上)

本文深入探讨了使用JavaScript操作DOM元素的方法,包括通过各种属性定位元素、修改元素属性及值,以及利用JS处理日期选择器和滚动条。通过具体实例展示了如何在Selenium中执行JS代码,实现自动化测试中对特定元素的精确控制。

js操作.py

'''
==================================
cooding:utf-8
@Time    :2020/8/22 9:29
@Author  :henry
@Email   :yinpingwei@gmail.com
@File    :js操作.py
@Software:PyCharm
===================================
'''

# js操作

'''
1.有一个顶层:document
2.通过document.getElementByxxxxx(定位元素)来找到元素
    1.通过id:document.getElementById(定位元素)   
        是唯一的,不可能有两个id,如果有,那就是有问题
    2.通过classname:document.getElementsByClassName(定位元素)      返回的列表
    3.通过name:document.getElementsByName(定位元素)  
    4.通过TagName(标签名):document.getElementsByTagName(定位元素)  
    
5.获取属性:
    赋值:a = document.getElementById("xxx")
    1.例如:a.id   返回id的值
    2.例如:a.style   返回样式
    3.例如:a.classname   返回classname值
    4.例如:a.tagname   返回tagname 值
    5.例如:a.name     返回name值
    6.还有个非常重要的属性value,不显示,但是有:
        a.value       返回value值
        
6.对属性上的修改
    1.如何在DOM中去改变他的value值:
        直接a.value = 新的值
    2.a.readOnly    返回的是false,表示输入框是可以输入
    3.修改返回值为ture,是输入框不可输入:
        a.readOnly = ture        返回的是ture
    4.还有一种是去掉这个属性:a.removeAttribute("readonly")  也可以进行修改
        
7.也可以通过a.getAttribute('定位方式') 这种来获取属性
    例如:a.getAttribute('id')
            
'''

js操作之——日期框.py

"""
python执行js代码

表示语法:driver.execute_script(js代码,传给js代码的参数)
"""

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.12306.cn/index/")

# sleep(2)
# # 第一个版本:通过js代码来实现
# js_code = 'a = document.getElementById("train_date");' \
#           'a.removeAttribute("readonly");' \
#           'a.value = "2020-08-24";'
#
# driver.execute_script(js_code)

# 第二个版本:通过python代码找到元素对象,动态的生成来实现
loc = (By.ID, "train_date")        # 元素表达式
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))       # 显性等待
ele = driver.find_element(*loc)         # find_element表达式
set_time = "2020-08-24"        # 设置的时间

js_code = 'arguments[0].removeAttribute("readonly");' \
          'arguments[0].value = arguments[1];'

# 如果要将外部的值,传给js代码。js的arguments变量用来接收外部参数。
driver.execute_script(js_code, ele, set_time)     # 第一个传进来的是对象(ele),第二个是字符串(set_time)

sleep(10)
driver.quit()

js操作——滚动条处理.py

"""
让元素滚动到可见区域后,再操作。
1、大部分的网页自己会滚

2、元素本身滚到可见的区域(使用这种):
    ele.location_once_scrolled_into_view

3、使用js来处理:
    element.scrollIntoView()
    js_code = 'arguments[0].scrollIntoView()'
    driver.execute_script(js_code,ele)
    
4.window.scrollTo(0,xxx)


"""
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element("id", "kw").send_keys("selenium", Keys.ENTER)

loc = (By.XPATH, '//a[text()="下一页 >"]')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
ele = driver.find_element(*loc)

# 第一种使用元素本身
# ele.location_once_scrolled_into_view

# 第一种使用js来处理
js_code = 'arguments[0].scrollIntoView()'
driver.execute_script(js_code, ele)

sleep(10)
driver.quit()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值