Selenium里可以自行封装与get_attribute对应的set_attribute方法
- 我们在做UI自动化测试的过程中,某些情况会遇到,需要操作WebElement属性的情况。
假设现在我们需要获取一个元素的title属性,我们可以先找到这个元素,然后利用get_attribute方法获取属性的值。
举个栗子:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
search_button = driver.find_element_by_id("su") # 百度搜索按钮
# 现在我们获取百度一下的值
value = search_button.get_attribute("value") # 获取input标签的value,也就是百度一下那4个字
print(value) # 打印 百度一下
但是现在我们有了新的需求,我们需要改变百度一下这个按钮里边显示的值。
先说一下原理,原理是利用js的dom(document object model),也就是文档对象模型,获取到input标签, 然后通过js来改变这个input标签的value属性。
js如下:
var button = document.getElementById("su");
button.setAttribute("su", "你猜一下");
//或者直接给value属性赋值
document.getElementById("su").value = "你猜一下";
我们在Chrome DevelopmentTools里边可以看到,“百度一下”变成了“你猜一下”~
那么为什么我们不直接用driver.execute_script()这个方法来执行上述js语句呢,但是要知道,因为dom里获取元素的方式有限,并不如selenium那么方便,什么link_text这类的api都是无法使用的。
昨天偶然发现2个问题,第一是execute_script函数是可以传脚本参数进去的,第二个是selenium抓取到的元素可以作为js的dom元素处理。有了这2点之后呢,就可以干活了!
现在用WebElement的方法做到同样的事情
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
search_button = driver.find_element_by_id("su") # 百度搜索按钮
# arguments[0]对应的是第一个参数,可以理解为python里的%s传参,与之类似
driver.execute_script("arguments[0].value = '你猜一下';", search_button)
补充一点, 如果需要获取js语句执行后的返回值,在js语句前加"return" 就行了,例如:
button_value = driver.execute_script("return arguments[0].value;", search_button)
Selenium里可以自行封装与get_attribute对应的set_attribute方法的更多相关文章
- python+selenium十:基于原生selenium的二次封装
from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...
- python+selenium十:selenium的二次封装
python+selenium十:基于原生selenium的二次封装 from selenium import webdriverfrom selenium.webdriver.support.w ...
- VUE 2.0 引入高德地图,自行封装组件
1. 高德地图官网 申请帐号, 申请相应(JavaScript API)的 Key 2. 在项目中引入, 这里和其他的引入不同的是 直接在 index.html, 不是在 main.js 引入, 博主 ...
- QJSON封装好的序列和还原方法
QJSON封装好的序列和还原方法 {*******************************************************}{ }{ QJSON与数据集互转 }{ }{ 版权所 ...
- 封装一个类似jquery的ajax方法
//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataT ...
- http协议里定义的四种常见数据的post方法
原文 https://blog.csdn.net/charlene0824/article/details/51199292 关于http协议里定义的四种常见数据的post方法,分别是: applic ...
- Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用方法
Android NFC开发(二)--Android世界里的NFC所具备的条件以及使用方法 NFC的应用比较广泛,而且知识面也是比较广的,所以就多啰嗦了几句,我还还是得跟着官方文档:http://dev ...
- 把jQuery的类、插件封装成seajs的模块的方法
这篇文章主要介绍了把jQuery的类.插件封装成seajs的模块的方法,需要的朋友可以参考下 注:本文使用的seajs版本是2.1.1 一.把Jquery封装成seajs的模块 define(func ...
- 基于原生JS封装数组原型上的sort方法
基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...
随机推荐
- Windows 产品激活状态、密钥等信息查看
目前,大多PC都是预装了微软家的桌面级系统 Windows ,这也算是微软一大得意之作.可是 Windows 产品可不是免费的,是要 $ 的.可能在中国,大多数系统可能是盗版过来的,像当年的雨林木风( ...
- maven项目添加findbugs,checkstyle,jacoco,assembly,maven-jar-plugin插件的配置
(1)名称解释(插件的作用) findbugs:检测代码的不明显的语法错误.例如:用了==去比较字符串,定义了没有用的变量-- checkstyle:检测代码的格式规范.例如:方法没有写注释,类的命名 ...
- CRC检验
CRC(循环冗余检验码) 基本原理:在K位信息码后面加上R位校验形成N位编码(即CRC码),事先需要约定一个生成多项式G(x),校验码生成过程:将K位信息码向左移动R位然后mol(其实就是按位异或)上 ...
- web.xml 中<context-param>与<init-param>的区别与作用
<context-param>的作用: web.xml的配置中<context-param>配置作用 1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件 ...
- SQL语句-delete语句
delete语句 delete语句用于删除表中已经存在的整行数据 Tbl_name关键词代表删除数据的目标表 Where子句代表被删除数据的满足条件,如果没有where子句则代 表所有表数据都删除 O ...
- 【转】c++ 获取程序运行时间
转自:http://blog.csdn.net/ghevinn/article/details/22800059 DWORD start_time=GetTickCount(); {...} DWOR ...
- MySQL--当事务遇到DDL命令
众所周知MySQL的DDL语句是非事务的,即不能对DLL语句进行回滚操作,哪在事务中包含DDL语句会怎样呢? 如: #禁用自动提交 set autocommit=off; #创建tb1 create ...
- 树莓派用U盘安装系统
* 需要使用Raspbian / Raspbian Lite或更高版本的2017-04-10版本 *不会SD卡装系统? 1. 先用装好Raspbian系统的SD卡启动 在命令行输入 echo ...
- @RequestMapping注解
Spring MVC中用于参数绑定的注解有很多,都在org.springframework.web.bind.annotation包中,根据它们处理的request的不同内容部分可以分为四类(主要讲解 ...
- CenOS 上安装 Redis 服务器
1.构建 Redis 因为 Redis 官方没提供 RPM 安装包,所以需要编译源代码,则需要安装 GCC & MAKE. 终端输入: yum install gcc make 从官网下载 t ...
