HTML中的js在自动化中的应用
javascript:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能
在自动化中的作用:
1.web自动化测试框架的原理就是通过js来实现对web元素的操作
selenium他将我们要进行自动化操作的网页内嵌到他自己的网页,然后通过脚本语言(js)去执行自动化操作(自动化框架appium,qtp,macaca,robotframework)
2.可以提高我们自动化用例执行的效率和稳定性
时间日历控件 js可以提取浏览器提供的很多对象,提供了很丰富的页面元素操作方法,进行操作
文件上传
3.selenium难以实现的操作可以用js实现
a、一些隐藏的按钮,通过js更改元素的属性,显示隐藏案例
b、滚动条
c、 前段限制输入
web网页组成
结构(Structure)、表现(Presentation)和行为(Behavior)
html:定义网页内容===结构(Structure)
css:描述网页的布局==表现(Presentation)
js:实现网页的行为==行为(Behavior)
脚本必须放在<Script></Script>中实现
例子:
页面元素<input type="text" class="input" value="2018-07-21" id="train_date" readonly="">
selenium实现时间日历选择:
#点击时间控件
driver.find_element_by_id('train_date').click()
time.sleep(3)
#点击下一个月的按钮
<a href="javascript:void(0);" class="first"></a>
/html/body/div[10]/div[1]/div[1]/a[1]
driver.find_element_by_xpath("/html/body/div[10]/div[1]/div[1]/a[1]").click()
time.sleep(3)
#点击4月5号
<div class="so" style="color: rgb(49, 49, 49);">5</div>
/html/body/div[10]/div[1]/div[2]/div[5]/div
driver.find_element_by_xpath("/html/body/div[10]/div[1]/div[2]/div[5]/div").click()
js实现时间日历控件选择:
# document.getelementbyid这个是js中根据id获取元素(值)的写法。如:
# <input type="text" id="test" value="1111"/>
# var value = document.getElementById("test").value;//获取id为test的input的value
js = document.getElement('train_date').value(2020-04-22) #定位元素
driver.execute_script(js) # 执行js
time.sleep(3)
# 登录是弹窗
1、第一种方法
①注:在JavaScript的console中回车执行
②childNodes[1],表示元素节点位置
③removeAttribute(“target”),表示删除元素
js = 'document.getElementsByClassName("site-nav-right fr")[0].childNodes[1].removeAttribute("target")'
driver.execute_script(js) #调用js方法,同时执行javascript脚本
driver.find_element_by_link_text('登录').click()
driver.find_element_by_id("username").send_keys("*****")
2、第二种方法
JavaScript比较复杂,我们可不可以通过selenium定位元素来执行JavaScript的脚本,可以的
①通过selenium定位元素登录链接
login_link = driver.find_element_by_link_text(‘登录’)
②把login_link元素传入JavaScript语句,代替
document.getElementsByClassName(“site-nav-right fr”)[0].childNodes[1],而arguments[0]可以帮我们把selenium的元素传入到JavaScript语句中
arguments指的是execute_script()方法中js代码后面的所有参数,arguments[0]表示第一个参数,argument[1]表示第二个参数
js=’arguments[0].removeAttribute(argument[1])’
driver.execute_script(js,login_link,”target”)
③点击登陆链接
login_link.click()
login_link = driver.find_element_by_link_text('登录')
js='arguments[0].removeAttribute(argument[1])'
driver.execute_script(js,login_link,"target")
login_link.click()