目录

(十六)执行javascript

执行javascript

使用driver.executeScript(js)方法会在当前的定位上下文里执行相应的js脚本。

传参

executeScript方法支持向脚本中传入参数,所有参数的参数都可以在脚本中通过arguments对象来引用。我们可以传入下列类型的参数:

  • boolean
  • number
  • string
  • WebElement:也就是我们定位到的页面对象
  • Array或者是Object: 只要里面的每一项都是上面的类型就好了

返回值

同样的,我们可以接收js脚本的返回值,返回值有下面一些情况

  • 如果js返回HTML元素,那么该元素会自动被封装成WebElement
  • null 或者 undefined会被转成null
  • boolean, number, string 不做转换
  • function会被转成相应的字符串表示
  • Array和Object中的每一项都按照上面的规则转换

目的

  • 学会使用executeScript(js)方法
  • 学会向js脚本中传参
  • 学会从js脚本中接收返回值

场景

打开百度首页

  • 先隐藏掉百度一下按钮
  • 然后返回页面上所有导航链接的文本
  • 最后把页面背景变成黑色

代码

var path = require('path');
var webdriver = require('selenium-webdriver'),
  By = webdriver.By;

var url = "http://www.baidu.com/";

var dr = new webdriver.Builder().forBrowser('chrome').build();
dr.get(url)

// 先隐藏掉百度一下按钮
// 通过arguments[0]传入百度一下按钮
var hideBtn = "arguments[0].style.display='none';"

dr.executeScript(hideBtn, dr.findElement(By.id('su')));


// 然后返回页面上所有导航链接的文本
// 通过return返回需要的结果
var linkTexts = "return $('.mnav').text()"
dr.executeScript(linkTexts).then(function(texts) {
  console.log(texts);
});

// 最后把页面背景变成黑色

dr.executeScript("document.body.style.backgroundColor='black'");

运行结果

浏览器

http://wx4.sinaimg.cn/mw1024/726a2979gy1fhp354hg8ij21ku0xegop.jpg

命令行输出

新闻hao123地图视频贴吧学术

原始封面

https://images.unsplash.com/photo-1520034475321-cbe63696469a?w=300