使用java执行一个浏览器_Java Selenium WebDriver 操作调用浏览器后台执行Js(JavaScript)代码...

1、Selenium WebDriver安装引用

注意:要用使用的浏览器肯定要装,并且Selenium.Chrome.WebDriver版本要和浏览器版一致。

如果要操作其它浏览器,则下载安装对应其它浏览器的程序包,本文主要是Chrome浏览器。

2、Selenium WebDriver执行Js代码import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

class PerformJavaScript{

WebDriver driver;

String baseurl;

private JavascriptExecutor js;

public static void main(String[] args) throws InterruptedException{ //谷歌浏览器的本地驱动

System.setProperty("webdriver.chrome.driver",

"/Users/lisen/webselenium/selenium/chromedriver");

//谷歌浏览器

driver = new ChromeDriver();

//设置访问网址

baseurl = "https://www.baidu.com/";

//

//将WebElement类型的driver强制转换为js类型的

js = (JavascriptExecutor) driver;

//设置隐性等待

driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

//窗口最大化

driver.manage().window().maximize();

//打开网址

//使用Javascript语言打开百度网址

js.executeScript("window.location='https://www.baidu.com/';");

System.out.println("执行Javascript命令完成");

//等待3秒钟

Thread.sleep(3000);

//查找元素

//向下转型,将WebElement 转换为object

WebElement TestBOx = (WebElement) js.executeScript(

"return document.getElementById('kw');");

System.out.println("执行Javascript,根据ID查找元素完成");

TestBOx.sendKeys("test");

//等待

Thread.sleep(3000);

//关闭浏览器

driver.quit();

}

}

3、使用executeAsyncScript执行Js代码

调用的函数executeAsyncScript将'done callback'作为最后一个参数,必须调用该函数来表示脚本已完成执行。否则会报执行脚本超时(Timeout)的错误。代码如下:

1) 在浏览器中执行sleeplong start = System.currentTimeMillis();

((JavascriptExecutor) driver).executeAsyncScript(

"window.setTimeout(arguments[arguments.length - 1], 500);");

System.out.println(

"Elapsed time: " + (System.currentTimeMillis() - start));

2) 将测试与AJAX应用程序同步WebElement composeButton = driver.findElement(By.id("compose-button"));

composeButton.click();

((JavascriptExecutor) driver).executeAsyncScript(

"var callback = arguments[arguments.length - 1];" +

"mailClient.getComposeWindowWidget().onload(callback);");

driver.switchTo().frame("composeWidget");

driver.findElement(By.id("to")).sendKeys("bog@example.com");

3) 注入XMLHttpRequest并等待结果Object response = ((JavascriptExecutor) driver).executeAsyncScript(

"var callback = arguments[arguments.length - 1];" +

"var xhr = new XMLHttpRequest();" +

"xhr.open('GET', '/resource/data.json', true);" +

"xhr.onreadystatechange = function() {" +

"  if (xhr.readyState == 4) {" +

"    callback(xhr.responseText);" +

"  }" +

"}" +

"xhr.send();");

JSONObject json = new JSONObject((String) response);

assertEquals("cheese", json.getString("food"));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值