Selenium3 + Python3自动化测试系列十——调用JavaScript代码

调用JavaScript代码

一、调用JavaScript代码方法

  Selenium在对浏览器操作时会有自动化代码中不稳定的部分,经常出错的部分,可以将这部分对网页元素进行操作的代码换成对应的JavaScript脚本,由于浏览器原生的支持JavaScript,JavaScript代码直接在浏览器内核中执行,就不会出现元素不在所点击的位置等错误,可以大大提高自动化用例执行的稳定性和执行效率。

  调用JavaScript方法有两种:

  1、execute_script():此是同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕。

  execute_script()方法如果有返回值,会有以下几种情况:

    • 返回一个页面元素(document element),这个方法就会返回一个WebElement
    • 返回浮点数数字,这个方法就返回一个double类型的数字
    • 返回非浮点数字,方法返回long类型数字
    • 返回blloean类型,方法返回Boolean类型
    • 返回一个数组,方法发挥一个List类型
    • 其他情况,返回一个字符串

  2、execute_async_script():此是异步方法,它不会阻塞主线程执行。

二、execute_script()与execute_async_script()区别

  同步执行JavaScript和异步执行JavaScript的区别

    同步执行:driver.execute_script( js)

    如果JavaScript代码的执行时间较短,可以选择同步执行,因为Webdriver会等待同步执行的结果,然后再运行其它的代码。

    异步执行:driver.execute_async_script(js)

    如果JavaScript代码的执行时间较长,可以选择异步执行,因为Webdriver不会等待其执行结果,而是直接执行下面的代码。

三、举个栗子  

  我们来举个栗子实践一下如何使用,execute_script()调取执行JavaScript代码。调用简单的alert弹框js语句,具体代码如下:

from selenium.webdriver import Chrome
from time import sleep

# 打开百度首页
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("https://www.baidu.com/")

# 弹出一个alert弹框
js = "alert(‘这是一个alert弹框‘);"
driver.execute_script(js)
sleep(2)
# 关闭弹框
driver.switch_to.alert.accept()
sleep(2)
driver.quit()

  我们再来看一个栗子。我们都知道,用于调整浏览器滚动条位置的JavaScript代码如下:window.scrollTo(0,450);

  window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码如下:

from selenium.webdriver import Chrome
from time import sleep

# 访问百度
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("http://www.baidu.com")

# 设置浏览器窗口大小
driver.set_window_size(500, 500)

# 搜索
driver.find_element_by_id("kw").send_keys("selenium")
sleep(2)

# 通过javascript设置浏览器窗口的滚动条位置
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(3)

driver.quit()

  通过浏览器打开百度进行搜索,并且提前通过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通

过execute_script()方法执行JavaScripts代码来移动滚动条的位置。

  JavaScript在WebDriver中还可以实现很多功能,我们在后期实践过程中再总结

原文地址:https://www.cnblogs.com/wuweiblogs/p/11430136.html

时间: 2024-11-07 12:55:45

Selenium3 + Python3自动化测试系列十——调用JavaScript代码的相关文章

Selenium3 + Python3自动化测试系列七——多窗口切换

多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换. 以百度首页和百度注册页为例,在两个窗口之间的切换如下图. from selenium.webdriver import Chrome import time driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\ch

在HTML标签<a/>中调用javascript代码

<a/>标签的“href”属性可以是一个有效的URL,表示跳转的目的地,除此之外,href还可以是一段javascript代码.当为“href”设置javascript代码时,格式如下:<a href=”javascript:……;” />.当点击这种形式的超链接时,浏览器将执行“href”中设置的javascript代码.需要注意的是,如果代码执行之后的返回值是一个有效值(除“undefined”之外的值)的话,当前页面的内容将会被返回值替换! W3C标准不推荐使用这种方法来调用

如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码

1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/web_v" /> 2在activity里绑定网页: public class MainActivity extends Action

Java8 Nashorn实现Java调用javascript代码

最近项目需要,利用java执行动态语言,首先想到的是支持js. 1.从打印Hello World开始 Java8 引入Nashorn实现javascript调用,比如使用java运行一段js实现"Hello World"打印: package com.iflytek.research.jsdemo; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script

Python3练习题系列(08)——代码阅读方法及字典跳转表理解

问题:分析下面代码 cities['_find'] = find_city city_found = cities['_find'](cities, state) 分析过程: 一个函数也可以作为一个变量,def find_city比如这一句创建了一个你可以在任何地方都能使用的变量.在这段代码里,我们首先把函数find_city放到叫做cities的字典中,并将其标记为'_find'. 第二行代码可以分解成如下步骤: 1. Python 看到city_found = 于是知道了需要创建一个变量.

Android WebView中的JavaScript代码使用(转载)

转载来源:http://www.cnblogs.com/mengdd/archive/2013/03/02/2940185.html 本篇文章主要介绍WebView中的JavaScript代码的执行相关,已经JS代码与Android代码的互相调用. (因为本人对Web开发并不是很熟悉,所以如果有哪些地方说得不对,还请指正.) 在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己

深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)

才华横溢的Stoyan Stefanov,在他写的由O’Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情.具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以

如何实现 javascript “同步”调用 app 代码

在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些情况下,我们可能更需要同步接口.同步接口的好处在于,首先 js 可以通过返回值得到执行结果:其次,在混合式开发中,app 层导出的某些 api 按照语义就应该是同步的,否则会很奇怪——一个可能在 for 循环中使用的,执行非常快的接口,比如读写某个配置项,设计成异步会很奇怪. 那么如何向 js 层导

Android的JS调用Java代码或使用了Javascript相关技术改如何混淆

http://www.androidren.com/index.php?qa=282&qa_1=android的js调用java代码或使用了javascript相关技术改如何混淆 Android 4.2开始 JS调用Java代码的时候必须加上@JavascriptInterface才能调用. 加上@JavascriptInterface之后就必须要考虑混淆时候的问题,如果混淆的时候把@JavascriptInterface搞丢了你的程序就无法调用了. 其实很简单,你只需要在混淆里面加上: -ke