WebDriver API——javascript的相关操作
有些时候webdriver是没法操作元素或浏览器的,这时候我们可以通过javascript来进行相关的操作,昨天在群里一个朋友定位一个显示框,总是无法定位点击,或者是点击无效,这个时候就可以用javascript来操作试下。
1.javascript操作浏览器滚动条
package com.testngDemo; import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; public class Demo_Javascript { static String baseUrl;
static WebDriver driver; @BeforeClass
public void setup()
{
driver = new FirefoxDriver();
baseUrl = "http://www.sogou.com";
driver.manage().window().maximize();
}
@Test
public void test() throws Exception
{
driver.get(baseUrl); scrollWebDown(driver);
Thread.sleep(5000); scrollWebTop(driver);
Thread.sleep(5000); }
@AfterClass
public void teardown()
{
//driver.quit();
}
//移动到底部
public static void scrollWebDown(WebDriver driver)
{
((JavascriptExecutor)driver).executeScript("document.documentElement.scrollTop=10000");
}
//移动到顶部
public static void scrollWebTop(WebDriver driver)
{
((JavascriptExecutor)driver).executeScript("document.documentElement.scrollTop=0");
}
}
2.使用javascript操作元素,修改元素属性
打开搜狗主页,它有一个更多按钮,当我们定位并点击的时候发现它是闪了一下,并没有完全下拉展示(这个问题跟群里那个朋友遇到的一模一样),我们先来看下html

一般思路我们所定位的那个元素 id="more-product",无论使用是什么方法点击它,移动鼠标到这个位置,都只会让下拉框闪一下,并且无法定位下拉框里的内容,原因是什么呢?原因在后面 href="javasript:void(0);",这段js代表什么呢,代表的是点击链接后不做任何事情,void是javascript的一个操作符,只执行()里的内容但是不刷新页面。这样无论我们怎么样操作这个元素都是没有作用的。我们可以发现当鼠标移动到这个元素,下拉框 products-box 的style会由display:none变为 display:block,从而将下拉框展示在页面上,这样我们直接通过js来操作这个下拉框。
//用javascript来试试
JavascriptExecutor js = (JavascriptExecutor)driver;
// js.executeScript("document.getElementById('products-box').style.display='block';"); //或者
WebElement proBox = driver.findElement(By.id("products-box"));
js.executeScript("arguments[0].style=arguments[1]",proBox,"display:block;"); driver.findElement(By.xpath("//*[@id='index_more_gouwu']")).click();
发现可以定位下拉框的内容了:

我们也可以修改元素属性:
public void setAttribute(WebDriver driver,WebElement element,String attributeName,String value){
JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", element,attributeName,value);
}
对于某些富文本或者一些特殊类型的input输入框,使用javascript给其赋值:
File file = new File("resources/text");
WebElement input =driver.findElement(By.id("xxxx");((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]",input, file.getAbsolutePath());
WebDriver API——javascript的相关操作的更多相关文章
- 转:python webdriver API 之浏览器的操作
1.1.浏览器最大化在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试的灵活性及普遍适用性.比如可以跟 sikuli 结合,使用 sikuli 操作 flash.# ...
- WebDriver API——鼠标及键盘操作Actions
在自动化中我们可能需要用到鼠标或者是键盘操作,在webdriver中是Actions类进行这些操作的. 代码如下: Actions action = new Actions(driver); //-- ...
- Javascript 数组相关操作
数组排序问题: sort() arr.sort() 可以直接进行排序,但是排序的方式是按unicode 顺序而来,比如1,1000,200,这个顺序不是我们想要的结果: 所以有了另一种方法,针对num ...
- javascript iframe相关操作
1. 获得iframe的window对象 iframeElement.contentWindow 2. 获得iframe的document对象 存在跨域访问限制. chrome:iframeEleme ...
- 转:python webdriver API 之调用 JavaScript
当 webdriver 遇到没法完成的操作时,笔者可以考虑借用 JavaScript 来完成,比下下面的例子,通过 JavaScript 来隐藏页面上的元素.除了完成 webdriver 无法完成的操 ...
- Phoenix简介概述,Phoenix的Java API 相关操作优秀案例
Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...
- 利用JAVA API远程进行HDFS的相关操作
学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...
- python+selenium自动化软件测试(第2章):WebDriver API
2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...
- Selenium WebDriver Api 知识梳理
之前一直没有系统的梳理WebDriver Api的相关知识,今天借此机会整理一下. 1.页面元素定位 1.1.8种常用定位方法 # id定位 driver.find_element_by_id() # ...
随机推荐
- Codeforces Round #321 (Div. 2) Kefa and Park 深搜
原题链接: 题意: 给你一棵有根树,某些节点的权值是1,其他的是0,问你从根到叶子节点的权值和不超过m的路径有多少条. 题解: 直接dfs一下就好了. 代码: #include<iostream ...
- 为什么我们要用Python
最近有一个朋友问我:为什么我要用Python,这是一个好问题,今天有空,把这个问题简单整理了一下,回来朋友的问题.该整理主要来源于网络和其他资料,如果有侵权还请告知. Python的好 ...
- PyTorch框架+Python 3面向对象编程学习笔记
一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...
- Java定义接口变量为接收类型有什么好处(面向接口编程)
个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性. 面向接口编程: 一种规范约束 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者 ...
- Maven的POM简单理解
以下引用自官方的POM介绍https://maven.apache.org/guides/introduction/introduction-to-the-pom.html: 一.什么是POM? 项目 ...
- linux下命令行的查找顺序
由下可知,linux通过$PATH的路径顺序,由左至由依次查找某个程序,如果有两个路径下都有这个程序,以先找到的为准 [rpc_server]$ which 23/usr/bin/which: no ...
- [置顶] vue-cli的webpack模板项目配置文件分析
2017-09-11更新:更新到webpack 2.6.1所对应的配置,完善部分代码注释. 由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和c ...
- 浅谈拒绝服务攻击的原理与防御(4):新型DDOS攻击 – Websocket和临时透镜
0×01 前言 前几天我已经分别发了三篇关于DDOS攻击相关的文章,我也是第一次在freebuf上发表这种文章,没想到有那么多人点击我真的很开心,前几天我为大家介绍的DDOS攻击的方法和原理都是已经出 ...
- EasyHook库系列使用教程之四钩子的启动与停止
此文的产生花费了大量时间对EasyHook进行深入了解同一时候參考了大量文档 先来简单比較一下EasyHook与Detour钩取后程序流程 Detours:钩取API函数后.产生两个地址,一个地址相应 ...
- Hierarchical data in postgres
https://coderwall.com/p/whf3-a/hierarchical-data-in-postgres --------------------------------------- ...