有些时候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的相关操作的更多相关文章

  1. 转:python webdriver API 之浏览器的操作

    1.1.浏览器最大化在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试的灵活性及普遍适用性.比如可以跟 sikuli 结合,使用 sikuli 操作 flash.# ...

  2. WebDriver API——鼠标及键盘操作Actions

    在自动化中我们可能需要用到鼠标或者是键盘操作,在webdriver中是Actions类进行这些操作的. 代码如下: Actions action = new Actions(driver); //-- ...

  3. Javascript 数组相关操作

    数组排序问题: sort() arr.sort() 可以直接进行排序,但是排序的方式是按unicode 顺序而来,比如1,1000,200,这个顺序不是我们想要的结果: 所以有了另一种方法,针对num ...

  4. javascript iframe相关操作

    1. 获得iframe的window对象 iframeElement.contentWindow 2. 获得iframe的document对象 存在跨域访问限制. chrome:iframeEleme ...

  5. 转:python webdriver API 之调用 JavaScript

    当 webdriver 遇到没法完成的操作时,笔者可以考虑借用 JavaScript 来完成,比下下面的例子,通过 JavaScript 来隐藏页面上的元素.除了完成 webdriver 无法完成的操 ...

  6. Phoenix简介概述,Phoenix的Java API 相关操作优秀案例

    Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...

  7. 利用JAVA API远程进行HDFS的相关操作

    学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...

  8. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  9. Selenium WebDriver Api 知识梳理

    之前一直没有系统的梳理WebDriver Api的相关知识,今天借此机会整理一下. 1.页面元素定位 1.1.8种常用定位方法 # id定位 driver.find_element_by_id() # ...

随机推荐

  1. Java集合——概述

    Java集合——概述 摘要:本文主要介绍了几种集合类型以及有关的一些知识点. 集合类图 类图 类图说明 所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collecti ...

  2. List遍历时删除遇到的问题

    这周在开发中遇到了一个以前没遇到的小Bug,在这里记录下来. List集合,我们平时都经常使用.但是,我在遍历List集合时,调用了List集合的remove方法来删除集合中的元素,简单的代码结构是这 ...

  3. BZOJ1006神奇的国度 弦圖染色 最大勢算法

    @[弦圖染色, 最大勢算法] Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA 相互认识,是简洁高效的.为了巩固三角 ...

  4. 转 Tesseract-OCR 字符识别---样本训练

    转自:http://blog.csdn.net/feihu521a/article/details/8433077 Tesseract是一个开源的OCR(Optical Character Recog ...

  5. Objc的底层并发API(转)

    本文由webfrogs译自objc.io,原文作者Daniel Eggert.   小引 本篇英文原文所发布的站点objc.io是一个专门为iOS和OS X开发者提供的深入讨论技术的平台,文章含金量很 ...

  6. Android:MVC模式(下)

    在上一篇文章中,我们将 View 类单独出来并完成了设计和编写.这次我们将完成 Model 类,并通过 Controller 将两者连接起来,完成这个计算器程序. 模型(Model)就是程序中封装了数 ...

  7. source insight的查找功能

    source insight是一款非常好的c语言的程序编辑器.方便对project管理,方便程序的阅读和编辑. 查找功能使用十分频繁.选项较多,与其他软件的查找功能也类似,以下对英文版的查找功能,做简 ...

  8. String,StringBuilder性能对照

    import java.util.Date; import java.util.UUID; /**  * 測试String,StringBuilder性能,推断什么时候改用String,什么时候该用S ...

  9. 常见Struts、Hibernate、Spring、J2EE、ibatis、Oracle等开发框架架构图及其简介

    各种系统架构图及其简介 转载请保留出处,不胜人生一场醉汇总. 以下文字和架构图均在本人相关系统设计和架构方案中有所应用. 原文出处:http://space.itpub.net/6517/viewsp ...

  10. bash的几个特殊参数和位置参量

    http://blog.csdn.net/jiankun_wang/article/details/4336285 一.$*和$@ 首先介绍两个极其相似.很难区分的特殊参数$*和$@,先看如下输出: ...