oracle execute immediate执行多条语句_Selenium实际应用注入并执行Javascript语句

fa43a5d1a76a4aea9bcbac4c666d9947.png

Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作

事实上,Selenium还可以支持插入js语句、执行js语句、返回js语句的执行结果到python程序中。这对于那些已经习惯了Javascript语法的程序员们,简直是一大神器

我们简单看看在实际应用场景selenium如何应变各种难题执行JS语句

01

selenium原生的方法对页面的一个input元素执行输入时,通常需要用到selenium中的send_keys以及clear方法,

通常的写法:

dr.find_element_by_xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/input').clear()dr.find_element_by_xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/input').send_keys(" user_name")

该方法大多数时候已经足够好用,但是仔细分析,send_keys方法主要是模拟的用户键盘操作,程序执行时必须要保证该元素始终获取焦点,页面执行过程中尽量不能动页面,否则send_keys方法可能会失效。

而且我们每次send_keys之前需要对input元素已有的text进行清空,即初始化。笔者推荐使用JS注入selenium的方法来达到更好的效果,在selenium中写JS语句往往是如下形式:

JS写法

js="document.getElementsByClassName('form-control')[0].value='%s';"%(requestCode[i][0].value)dr.execute_script(js)

该方法,相当于是直接调用页面元素的value方法来进行赋值,不用考虑变量初始化问题,它属于网页后台功能,类似于F12直接在console中执行代码,不需要光标停留在该input元素上

02

想点查看网页的底部页面时,发现由于网页没有最大化导致元素隐藏定位失败,这里不用maximize_window(),我们用执行JS的方法来实现下。

首先我们来看一下这个页面,也是你们需要学习的文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/scrollBy

我们打开发后如果不是全屏,底部的元素只能通过前端页面滑动进行查看,

selenium常规操作

在selenium中我们可以使用maximize_window()或者set_window_size()自定义浏览器大小

JS写法

dr.execute_script('window.scrollBy(0,2000)')

实现逻辑

1.我们可以首先手动在页面打开F12打开console输入window.scrollBy(0.,20000) 执行看看是否能够滑动到页面底部如果可以正常滑动到页面底部,

2.我们在在selenium中执行我们上方的JS写法语句 就可以实现该页面滑动底部然后接着定位其它元素等操作,这种场景使用与很多后台或者底部翻页等被隐藏直接滑动下页面底部 执行翻页等功能操作

2d833b67f05d96ea9d89ce35cbc4dcd5.png

整体代码

# -*-coding=utf-8-*-import unittestfrom selenium import webdriverimport os, timedr = webdriver.Chrome()dr.implicitly_wait(3)url = 'https://developer.mozilla.org/zh-CN/docs/Web/API/Window/scrollBy'#打开网页#dr.get(url)#向右移动页面#dr.execute_script('window.scrollBy(0,20000)')

03

这里针对于小编公司应用终端是植入在第三方系统上,例如我们公司有个H5应用就必须在企微授权获取对应员工工号才能登录,那么这种不能通过网页端正常登录的移动端应用我们用selenium在网页端如何进行登录操作呢

访问地址如下:https://sma.******.com.cn/view/index.html?state=from_qywx#/(由于是公司系统域名隐藏哈)正常在浏览器访问直接提示如下页面或者直接跳转到无权限

d21b1cee9082681ecfdcd1836d2e86f1.png

常规浏览器登录

常规想在网页端登录需要执行如下操作,输入地址,在local Storage进行输入用户token以及工号登录

09b28f3123c49688a8f1954b0ad7ffe2.png

那么想在网页端 通过selenium模拟登陆如何操作呢?我们来看看JS登录方法

实现逻辑

1.我们先可以使用selenium执行模拟用户输入防止访问跳入无权限页面后,我们进行使用JS方法execute_script()植入token,将植入的token缓存在浏览器中,我们此时再次请求登录地址,这时就会获取上次植入的token正常登录到H5应用界面,直接绕过登录,

整体代码

# -*-coding=utf-8-*-import unittestfrom selenium import webdriverimport os, timeclass test_login(unittest.TestCase):    @classmethod    def setUpClass(cls):        cls.dr = webdriver.Chrome()        # 自定义浏览器分辩率 针对响应式页面,手机版等        # cls.dr.maximize_window() #全屏        cls.dr.set_window_size(600, 1000)  # 分辨率展示为597*802        time.sleep(2)        ulr1 = 'https://sma.******.com.cn/view/index.html?state=from_qywx#/login'        # (u'访问百果秘书系统')        cls.dr.get(ulr1)        time.sleep(1)        # 使用js/execute_script方法植入片区经理 工号******004 进行缓存        cls.dr.execute_script('localStorage.setItem("token", ******004)')        time.sleep(1)        # 再次访问环境 进行登录        ulr2 = 'https://sma.*******.com.cn/view/index.html?state=from_qywx'        cls.dr.get(ulr2)    @classmethod    def tearDownClass(cls):        time.sleep(2)        cls.dr.quit()    def test_case_001(cls):        '''验证是否登录成功'''        time.sleep(3)        text = cls.dr.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[1]/div[1]/div[1]/h1/span').text        cls.assertEqual(u'销售', text)if __name__ == '__main__':    unittest.main(verbosity=2)

selenium中执行JS场景简单介绍如上三个场景,平时工作中的运用之处进行总结分享,一是加深记忆,二是希望对于你们有所帮助,

谢谢各位的阅读,支持小编点个在看,分享到朋友圈

540ddd8f395d3b507bd99fcc9e2a0817.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值