selenium 相关api操作

时间:2022-09-06 20:43:02
driver.close(); //关闭程序
driver.findElement(By.id("idExpression")); //查找单个页面元素
driver.findElements(By.xpath("xpathExpression"));//查找一组页面元素
driver.get("网址"); //跳转到指定网址
driver.getClass(); //获取当前操作所属的类
driver.getCurrentUrl(); //获取当前访问的URL地址
driver.getPageSource(); //获取当前访问页面的html源代码
driver.getTitle(); //获取当前访问页面的标题
driver.getWindowHandle(); //获取当前窗口额句柄
driver.getWindowHandles();
driver.hashCode(); // 获取哈希值
driver.navigate(); // 用来模拟浏览器工具栏上一些按钮的功能
driver.switchTo();

//field,域是一种属性,可以是一个类变量,一个对象变量,一个对象方法变量或者是一个函数的参数。

WebDriver driver = new ChromeDriver();
driver.get("http://www.baidu.com/");
WebElement SerElement= driver.findElement(By.id("kw"));

windows的各个窗口都拥有唯一的标识,那就是句柄,可以说一个页面有唯一的句柄,没有重复的,当webdriver打开一个页面后,那么就出现一个新的句柄
MD5值要是相同的话,那就说明你下载的文件没有被第3方改动过, MD5值要是不同就话,那就说明你下载的文件被第别人改动过了

哈希值常常用来判断两个文件是否相同
哈希值 可以简单理解为一段数据(某个文件或字符串的)DNA,或者身份证,
通过哈希算法(MD5,SHA-1等),将一段较长的数据映射为较短的数据,
这段小数据就是大数据的哈希值.
哈希值是唯一的,只要它对应的数据发送一丁丁的变化,它的哈希值就会发送变化.
另一方面,既然是DNA,那就保证了没有两个数据的哈希值是完全相同的.
正应为这样,所以常用来判断两个文件是否相同.

navigate():用来模拟浏览器工具栏上一些按钮的功能

WebElement相关方法
1.点击操作
WebElement button = driver.findElement(By.id("login"));
button.click();
由元素对象调用click()方法; 2.清除操作
WebElement username = driver.findElement(By.id("username_input"));
username.clear();
调用之后,会把输入框的内容全部清空; 3.获得元素属性的值
<input type="text" value="" autocomplete="off" placeholder="用户名" id="u" class="form-control" onblur="checkFailNum()" name="username">
上面代码是用户名输入框的源码,我们要获取这个"用户名"三个字就需要用到;
getAttribute(java.lang.String name) 这方法,代码如下:
WebElement username = driver.findElement(By.id("u"));
username.getAttribute("placeholder"); 4.获取元素的文本
WebElement login = driver.findElement(By.id("loginBtn"));
login.getText(); 5.元素是否显示
方法有个返回值类型是boolean,也就是说如果元素显示了返回true,如果没有显示返回false;
WebElement login = driver.findElement(By.id("loginBtn"));
login.isDisplayed(); 6.元素是否被选择
WebElement checkbox = driver.findElement(By.id("checkbox_id"));
checkbox.isSelected();//会有返回值,如果勾选了。返回true,如果没有勾选返回false。 7.元素是否被启用
WebElement login = driver.findElement(By.id("loginBtn"));
login.isEnabled();
//如果可用返回true,如果不可用返回false 8.提交操作
<button class="btn btn-major" id="loginBtn" type="submit">登录</button>
WebElement login = driver.findElement(By.id("loginBtn"));
login.submit(); 10.iFrame处理
有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。
这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。
如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。
反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。
selenium webdriver中提供了进入一个iframe的方法:
WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId) 也提供了一个返回default content的方法:
WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
driver.switchTo().frame("id");//传入的是iframe的id 返回上一个iFrame:
driver.switchTo().defualContent(); 11. 操作下拉选择框
<select style="width:75px" onchange="change_prodj()" name="province" id="province">
<option value="10">A 安徽</option>
<option value="11">A 澳门</option>
<option value="12">B 北京</option>
<option value="43">C 重庆</option>
<option value="13">F 福建</option>
<option value="14">G 甘肃</option>
<option value="15">G 广东</option>
<option value="16">G 广西</option>
<option value="17">G 贵州</option>
<option value="18">H 海南</option>
<option value="19">H 河北</option>
<option value="20">H 河南</option>
<option value="21">H 黑龙江</option>
</select>
首先定位到select下拉框
WebElement element_province = driver.findElement(By.id("xxxx"));
然后将定位到的element传入select
Select province = new Select(element_province);
然后由select来操作下拉框
province.selectByIndex(0) //根据所选值的位置来选择下拉框值,从0开始
province.selectByValue("18") //根据value值来选择下拉框的值,比如这里的18,选择的就是海南
province .selectByVisibleText("北京")//这个是根据可见文本来操作下拉菜单,比如你选的北京,那么就会找到北京作为下拉框的 12. 处理alert
获取当前页面弹出的alert
Alert a= driver.switchTo().alert();
获取到alert之后,我们可以通过alert提供的方法来获取alert上的文本,模拟点击alert上的确定按钮,模拟点击alert上的取消按钮等
获取alert文本方法: a.gettext();
模拟点击确定按钮: a.accept();
模拟点击取消按钮: a.dismiss(); 13. 处理浏览器弹出的新窗口
我们在一个页面上,点击一个链接之后不会在当前页面上打开此链接而是新开一个窗口打开此页面。
那么我们如何跳转到新开的页面去操作新开的页面呢?selenium也提供了对应的API来处理。
首先我们需要了解下,每个窗口都是有个句柄的,可以理解为浏览器窗口的标识符。
我们可以根据这些标识符来确定新开的窗口,具体思路如下:
首先获得当前句柄:
String current_handles = driver. getWindowHandle();
出现新窗口之后,获取所有窗口句柄
Set<String> all_handles = driver.getWindowHandles(); 循环判断,把当前句柄从所有句柄中移除,剩下的就是你想要的新窗口
Iterator<String> it = all_handles.iterator();
while(it.hasNext()){
if(current_handles == it.next()) continue;
//跳入新窗口
WebDriver window = dr.switchTo().window(it.next());
}
最后就可以在新窗口的页面进行相关操作了,在新窗口操作的时候使用新driver进行页面操作,新driver是window
如果想回到最开始的窗口请使用:
driver.switchTo().window(current_handles) 14. 执行JS脚本
有时候我们需要JS脚本来辅助我们进行测试,比如我们用JS赋值或者用js执行点击操作等。
方法一:
声明js脚本
String js ="alert(\"hello,this is a alert!\")";
执行js脚本
((JavascriptExecutor) driver).executeScript(js);
执行之后会在浏览器上弹出一个alert,显示内容是"hello,this is a alert!" 核心代码如下:
WebDriver driver = new FirefoxDriver();
String js ="alert(\"hello,this is a alert!\")";
((JavascriptExecutor) driver).executeScript(js);
Thread.sleep(2000);
driver.quit(); 方法二:
这个方法比较适用某些元素不易点击的情况下使用,比如网页内容太长,当前窗口太长,想要点击那些不在当前窗口可以看到元素可以用此方法。
((JavascriptExecutor) driver).executeScript(String js, Object args);
此方法有两个参数,
第一个参数是: js脚本,至于js脚本你想写点击的或者输入的脚本都可以,我们这里举例为点击操作。
第二个参数是:要点击的元素。
比如我要点击百度搜索的搜索按钮,可以这样写:
((JavascriptExecutor) driver).executeScript("arguments[0].click();", driver.findElement(By.id("su")));
核心代码如下:
WebDriver driver = new FirefoxDriver();
driver.get("https://www.baidu.com/");
String js ="arguments[0].click();";
driver.findElement(By.id("kw")).sendKeys("JAVA");
WebElement searchButton = driver.findElement(By.id("su"));
((JavascriptExecutor) driver).executeScript(js,searchButton);
Thread.sleep(2000);
driver.quit(); 15. 等待元素加载
1.硬性等待(不推荐)
Thread.sleep(int sleeptime);
2.智能等待
public void waitForElementToLoad(int timeOut, final By By) {
try {
(new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
WebElement element = driver.findElement(By);
return element.isDisplayed();
}
});
} catch (TimeoutException e) {
Assert.fail("超时!! " + timeOut + " 秒之后还没找到元素 [" + By + "]",e);
}
} 3.设置等待页面加载完毕
int pageLoadTime = 10;
driver.manage().timeouts().pageLoadTimeout(pageLoadTime, TimeUnit.SECONDS); 16. 设置浏览器窗口大小
窗口最大化
driver.manage().window().maximize();
指定设置窗口大小
Dimension d = new Dimension
driver.manage().window().setSize(d);
指定窗口在屏幕中出现位置
Point p = new Point(500, 300);
driver.manage().window().setPosition(p);

本博客后部分内容转载自jdango, 感谢jdango博主的分享,

selenium 相关api操作的更多相关文章

  1. Elasticsearch 相关 api 操作

    A. es 操作 1. 检查 es 集群健康状态 2. 获取集群中的节点列表 3. 创建索引 4. 获取索引 5. 索引文档 6. 查询文档 7. 删除索引 8. 更新文档 9. 删除文档 10. 批 ...

  2. python selenium 相关操作

    selenium : 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Fi ...

  3. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作  1.1 用webdriver打开一个浏览器  1.2 最大化浏览器&关闭浏览器 ...

  4. UI自动化和selenium相关以及八大定位

    一.UI自动化相关 1. UI自动化的本质(重点) 定位元素→操作元素→模拟页面操作→断言→测试报告 2. 适合UI自动化的场景 UI自动化的前提条件 (1)需求不能频繁变动 (2)UI稳定(UI自动 ...

  5. 转 用C API 操作MySQL数据库

    用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...

  6. QQ音乐的各种相关API

    QQ音乐的各种相关API 分类: oc2014-01-29 15:34 2676人阅读 评论(2) 收藏 举报 基本上论坛里做在线音乐的都在用百度的API,进来发现百度的API不仅歌曲的质量不可以保证 ...

  7. &lbrack;原创&rsqb;java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. &lt&semi;转&gt&semi;selenium&plus;python&plus;API分类总结

    分类 方法 方法描述 客户端操作 __init__(self, host, port, browserStartCommand, browserURL) 构造函数.host:selenium serv ...

  9. Selenium 中文API

    Selenium 中文API   转自:http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通过命令进行驱动.Seleniu ...

随机推荐

  1. java中的集合&sol;容器的数据结构

    最近双11在网上买了本 数据结构和算法--java语言实现,正在啃,同时在慕课网上的学习进度来到了集合框架这一类,对于这一块算是刚刚了解,本科的时候数据结构学习的是严蔚敏老师的那本数据结构,代码的实现 ...

  2. E 最熟悉的陌生人 &lpar;纪念当年就读的梅州市江南高级中学&rpar;

    最熟悉的陌生人 作者:张慧桥 枪与玫瑰” 负责审讯的兄弟真是好样的,回来后的第四天上午就让黄志深那小子招了出来. 这可真的不容易! 现在*部对我们审讯工作有很多的规定,其中一条就是不准刑讯逼供,就是 ...

  3. python中时间日期格式化符号

    python中时间日期格式化符号: import time print(time.strftime('%Y%H%M%S', time.localtime())) 运行结果: 2016092308 %y ...

  4. linux下mysql修改数据库账户root密码

    #先停止mysql,再运行下一句 $ mysqld_safe --user=mysql --skip-grant-tables --skip-networking & $ mysql -u r ...

  5. 一个C&plus;&plus;基于boost简单实现的线程池

    xl_blocking_queue.h ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  6. 求高精度幂&lpar;java&rpar;

    求高精度幂 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要 ...

  7. Python&colon; Pandas运算的效率探讨以及如何选择高效的运算方式

    本文就Pandas的运行效率作一个对比的测试,来探讨用哪些方式,会使得运行效率较好. 测试环境如下: windows 7, 64位 python 3.5 pandas 0.19.2 numpy 1.1 ...

  8. 快速体验 Laravel 自带的注册、登录功能

    快速体验 Laravel 自带的注册.登录功能 注册.登录经常是一件很伤脑筋的是,Laravel 提供了解决方案,可以直接使用它.试过之后,感觉真爽! 前提:本地已安装好了 PHP 运行环境.mysq ...

  9. NET(C&num;)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口&lpar;3&rpar;

    如何引用Zookeeper.dll 下载最新版本的Zookeeper 地址:http://mirrors.cnnic.cn/apache/zookeeper/ 没有.NET代码 dotnet代码下载 ...

  10. vscode extensions

    ├─ .obsolete├─ .wlck├─ .wtid├─ abeyuhang.vscode-lesslint-0.0.1├─ abusaidm.html-snippets-0.2.1├─ adam ...