Selenium教程__使用execute_script执行JavaScript(11)

selenium的包含的方法已能完全满足UI自动化,但是有些时候又不得不用到执行JS的情况,比如在一个富文本框中输入1W个字,使用send_keys方法将经历漫长的输入过程,如果换成使用JS的innerHTML方法就能够很快的完成输入。

selenium执行JavaScript代码的方法有两种:

  1. 执行原生的JS代码
  2. 执行需格式化的JS代码

先简单写个html界面帮助演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <textarea id="kw" cols="30" rows="10"></textarea>
    <input type="text" name="" id="kw1">
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <div id="div">div标签</div>
    <button onclick="alt()" id="btn">按钮</button>
</body>
<script>
    function alt()
    {
        alert("我出来啦!!!");
    };
</script>
</html>

一、执行原生JS代码

这种方法是将所有操作全部交给js代码去实现,包括定位元素以及对元素的操作,因为原生JS定位元素有一定的局限性所以不是所有的元素都能使用该方法。

实现代码如下

from selenium import webdriver
import time

# 创建Chrome实例对象
driver = webdriver.Chrome()
# 打开浏览器并访问百度
driver.get("file:///C:/Users/41850/Desktop/test.html")
# 窗口最大化
driver.maximize_window()
time.sleep(2)

long_str = "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"

# 方法一:执行原生的JS代码
# 例1:向富文本插值
js = f"document.getElementById('kw').innerHTML='{long_str}';"
driver.execute_script(js)
time.sleep(1)

# 例2:向input框插值
js = f'document.getElementById("kw1").value="selenium"'
driver.execute_script(js)
time.sleep(1)

# 例3:滚动浏览器界面至指定元素
js = f"document.getElementById('div').scrollIntoView()"
driver.execute_script(js)
time.sleep(1)

# 例4:点击按钮
js = f'document.getElementById("btn").click()'
driver.execute_script(js)


# 关闭浏览器
# driver.quit()

二、先定位元素,再执行JS代码

第二种方法是先使用selenium定位元素,然后使用execute_script方法将传入的参数格式化成JS语句再执行,与第一种方法相比,更易用。

实现代码如下

from selenium import webdriver
import time

# 创建Chrome实例对象
driver = webdriver.Chrome()
# 打开浏览器并访问百度
driver.get("file:///C:/Users/41850/Desktop/test.html")
# 窗口最大化
driver.maximize_window()
time.sleep(2)

long_str = "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"

# 方法二:执行需格式化的JS代码
# 例1:向富文本插值
el = driver.find_element_by_id("kw")
js = f"arguments[0].innerHTML='{long_str}';"
driver.execute_script(js, el)
time.sleep(1)

# 例2:向input框插值
el = driver.find_element_by_id("kw1")
js = f'arguments[0].value="selenium"'
driver.execute_script(js, el)
time.sleep(1)

# 例3:滚动浏览器界面至指定元素
el = driver.find_element_by_id("div")

js = f"arguments[0].scrollIntoView()"
driver.execute_script(js, el)
time.sleep(1)

# 例4:点击按钮
el = driver.find_element_by_id("btn")
js = f'arguments[0].click()'
driver.execute_script(js, el)


# 关闭浏览器
# driver.quit()

事必有法,然后有成- 最后祝大家早日达到测试的天花板!



以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以留言【777】直接拿走就好了

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: selenium execute_scriptSelenium中的一个方法,用于在浏览器中执行JavaScript代码。它可以用于模拟用户在浏览器中的行为,例如点击、滚动、输入等操作。同时,它也可以用于获取页面元素的属性、修改页面元素的属性等操作。使用execute_script方法可以让我们更加灵活地控制浏览器,实现更加复杂的自动化测试。 ### 回答2: Selenium execute_scriptSelenium WebDriver中的一个函数,它可以执行JavaScript脚本。在Web应用程序测试过程中,有时需要对页面进行一些操作,但是Selenium本身提供的API可能无法满足需求,此时就可以使用execute_script函数来执行JavaScript脚本。 使用execute_script函数,可以直接在当前页面的JavaScript环境下执行任意有效的JavaScript脚本代码。该函数接受一个JavaScript的字符串作为参数,并返回执行结果(如果有)。 比如,在使用Selenium进行网页自动化测试的过程中,可能需要对页面上的某些元素进行特定的操作,但通过Selenium提供的API无法实现。这时,就可以通过执行JavaScript脚本,直接对元素进行操作。比如,使用JavaScript设置某个元素的高度、宽度或颜色,就可以使用execute_script函数来执行此类脚本。 需要注意的是,在执行JavaScript脚本时,应该遵循一些最佳实践,比如避免使用过于复杂或深度嵌套的函数调用、使用变量名时应该注意避免与其他变量名冲突等等。 总之,Selenium execute_script函数可以让测试人员在进行自动化测试的过程中更加灵活地操作和控制Web应用程序页面。同时,也可以通过JavaScript脚本解决一些Selenium本身API无法解决的问题。因此,在使用Selenium进行自动化测试时,尽可能灵活地利用execute_script函数,可以帮助测试人员更好地完成测试任务。 ### 回答3: Selenium execute_scriptSelenium Web Driver提供的一个方法,它允许在浏览器上下文中执行JavaScript脚本,用于处理和操作难以用Selenium提供的API控制的网页元素。该方法可以模拟用户行为,操作特定的网页元素,也可以用于一些特殊的增强功能。 在使用Selenium execute_script方法时,需要先调用driver.execute_script(),然后将要执行JavaScript语句传递给它作为参数。JavaScript语句可以是用一个字符串表示的一系列命令,也可以是从文件中读取并存储在一个字符串变量中的JavaScript代码。 execute_script方法的主要优点是能够执行多线程、异步和模拟交互等复杂的JavaScript代码。此外,通过使用这种方法,可以在进行自动化测试时增强兼容性等方面,并快速定位和解决问题。 需要注意的是,使用execute_script操作网页元素时,尽量避免直接使用坐标和位置等操作,而应使用CSS选择器、XPath、类名等方式来定位元素,以获得更好的稳定性和可维护性。 综上所述,Selenium execute_script方法是一种非常实用和灵活的方法,在进行网页自动化测试和处理复杂的交互时,可以提高测试的效率和准确性,并降低测试成本和风险。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值