一、窗口基本操作

1. 关于窗口的设置都是由window对象提供的:

获取window的对象方法: driver.manage().window();

//1.获取 window 对象
Window window = driver.manage().window();//2.窗口最大化
window.maximize();
//3.获取窗口大小
Dimension dimension =window.getSize();
System.out.println("窗口的宽:"+dimension.getWidth()+"窗口的高:"+dimension.getHeight());//4.设置位置
window.setPosition(new Point(50, 80));//5.设置窗口的大小
window.setSize(new Dimension(800,300));

2. navigation 对象

 关于大量的浏览器导航栏的基本功能操作,大部分都是navigation 对象提供的!

driver.get("https://www.baidu.com");
//1.获取navigation 对象
Navigation navigation = driver.navigate();
//2. to(url); 在导航栏访问指定的url地址
navigation.to("https://ty.58.com");
//3. refresh(); 刷新当前页面
navigation.refresh();
//4. back(); 浏览器的回退操作
navigation.back();
//5. forward(); 浏览器的前进操作
navigation.forward();

3.元素定位一共有8种方法

id 唯一的
name 元素的名称
class name 元素的类名
tag name 标签,不推荐,重复率太高
link text 文本链接
partial link text 对文本链接的一种补充
xpath 相对/绝对路径
css selector css定位

(1) 通过id或name定位

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

通过元素所带的id和name属性对元素定位:

driver.findElement(By.id("kw"));
driver.findElement(By.name("wd"));

(2) 通过class name或tag name定位

<div class="jstEditor">
<textarea cols="60" rows="10" accesskey="e" class="wiki-edit" name="issue[description]" id="issue_description">
</textarea>
</div>

通过元素中带的class属性定位

driver.findElement(By.className("iki-edit"));//值唯一的情况下,
driver.findElements(By.className("iki-edit"));//值不唯一的情况下使用,返回的是元素的集合 List<WebElement>

通过元素中的tag标签定位,这种定位方式极不靠谱,不推荐采取此种方式。

driver.findElements(By.tagName("div"));//一般情况下值不唯一,返回的是元素的集合 List<WebElement>

附加说明,如果class属性含有空格,那么取其中一个不重复的字段就可以了,例子:

<a title="新建版本" tabindex="200" class="icon-only icon-add" data-remote="true" data-method="get" href="/projects/bk_community/versions/new">新建版本</a>

其中class的属性值为“icon-only icon-add”,取其中“icon-only”、“ icon-add”都可以,但最好是取其中唯一的。

driver.findElement(By.className("icon-only"));//值唯一的情况下,
//或者
driver.findElements(By.className("icon-add"));//值不唯一的情况下使用,返回的是元素的集合 List<WebElement>

(3).通过link text和partial link text定位

<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>

通过text link定位元素

//值唯一的情况下使用findElement
driver.findElement(By.linkText("新闻"));
//值不唯一的情况下使用findElement获取到默认是第一个元素,使用findElements获取到的是List<WebElement>
driver.findElements(By.linkText("新闻"));

通过partial link text定位元素,当文字链接很长时,可以通过此方式取其中一部分,只要取的部分可以作为唯一标识。

driver.findElement(By.partialLinkText("新"));//值唯一
driver.findElements(By.partialLinkText("新"));//值不唯一

4.xpath定位

  什么是Xpath,xpath说白了就是一个path,一个页面元素的位置信息(也可以说是元素的坐标)

  Xpath定位方式分两种: (1)绝对路径; (2) 相对路径;

(1).绝对路径:

  绝对路径以单/号表示,意味着让解析引擎从文档的根节点开始解析及<html>节点开始解析;

<!-- 注意:例如以下元素使用Xpath绝对路径获取,需要注意的是下从1开始,并不是从0开始:/html/div[2] -->
<!-- java代码: driver.findElement(By.xpath("/html/div[2]")); -->
<html>
<body>
<div></div>
<div>这个是我们想要获取的元素</div>
</body>
</html>

以百度输入框为例      :     /html/body/div/div/div/div/div/form/span/input

//绝对路径的使用
driver.findElement(By.xpath("/html/body/div/div/div/div/div/form/span/input"));

绝对路径使用的缺点: 只要前段页面的结构反正变化,该路径也随之失效,必须重新维护代码,修改其路径!

(2).相对路径

  相对路径则是以//表示,意思是Xpath从文档的任意符合的元素节点开始进行解析;

  > >>符号说明如下:

  // :匹配指定的节点,而无需考虑节点的位置

  * : 匹配任意元素的节点

  [ ] : 条件声明,在此符号内写条件

  @ : 选取属性

  >>> 使用说明如下:

  ① 属性 =>  //*[@id='xxx']

  ② 部分属性值 => //*[contains(@id,'xxx')]

  ③ 文本内容 => //*[text()='新闻']

  ④ 部分文本内容 //*[contains(text(),'新')]

  ⑤ 多条件组合 //*[@name='xxx'][text()='新闻']

以百度一下的点击为例:

driver.get("https://www.baidu.com");
//① 属性 => //*[@id='xxx']
driver.findElement(By.xpath("//*[@id='kw']")).sendKeys("自动化测试");;
//② 部分属性值 => //*[contains(@id,'xxx')]
driver.findElement(By.xpath("//*[contains(@value,'一下')]")).click();
//③ 文本内容 => //*[text()='新闻']
driver.findElement(By.xpath("//*[text()='新闻']")).click();
//④ 部分文本内容 //*[contains(text(),'新')]
driver.findElement(By.xpath("//*[contains(text(),'新')]")).click();
// ⑤ 多条件组合 //*[@name='xxx'][text()='新闻']
driver.findElement(By.xpath("//*[@name='tj_trnews'][text()='新闻']"));

也可以直接拿firefox或者chrome浏览器直接拷贝Xpath路径如下:

粘贴进来如下:

driver.findElement(By.xpath("//*[@id=\"su\"]"));//如果双引号需转义  \"

相对路径的优点:灵活,方便,耦合性低:

XPATH 详细学习链接:http://www.w3school.com.cn/xpath/xpath_syntax.asp

5.CSS定位

(1) css定位,方法很多。以百度输入框html代码为例:

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
WebElement  element = null;
//CssSelector元素常用定位
//1.根据ID(使用#id,id选择器)
element = driver.findElement(By.cssSelector("#kw"));
//2.根据className(.className)
element = driver.findElement(By.cssSelector(".s_ipt"));
//3.根据tagName(input),页面input唯一的情况下,一般情况需要加其他筛选条件
element =driver.findElement(By.cssSelector("input"));//默认获取到的是页面的第一个input元素
//4.根据name属性([name='name值'])
element =driver.findElement(By.cssSelector("[name='wd']"));
//5.多种组合器混合使用
element =driver.findElement(By.cssSelector("input[name='wd']"));
element =driver.findElement(By.cssSelector("input[id='kw']"));
element =driver.findElement(By.cssSelector("input[name='wd'][id='kw']"));
(2)通过css层级关系定位 => 还是以百度的输入框html代码为示例:

element =driver.findElement(By.cssSelector("form#form>span>input"));
element.sendKeys("自动化测试");
element =driver.findElement(By.cssSelector("form.fm>span>input"));
element.clear();

扩展:通过css索引定位(待续...)

学习后总结,不足之处后续修正!

【java + selenium3】窗口基本操作及8大定位元素方法总结(一)的更多相关文章

  1. selenium+python定位元素方法

    定位元素方法 官网地址:http://selenium-python.readthedocs.org/locating-elements.html        这里有各种策略用于定位网页中的元素(l ...

  2. Selenium3自动化测试【18】XPath定位元素(2)

    层级与属性结合定位 如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己.举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为&quo ...

  3. Selenium3自动化测试【20】CSS定位元素

    CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格. CSS使用选择器为页面元素绑定属性 ...

  4. selenium定位元素方法汇总

    #打开网页前三步 from selenium import webdriver driver=webidriver.Chrome() driver.get("https://www.baid ...

  5. WebDriver定位元素方法

    如果把页面上的元素看作人的话,在现实世界如何找到某人呢?方法有三: 一.通过人本身的属性,例如他的姓名,手机号,身份证号,性别,这些可区别他人的属性.在web页面上的元素也有这些属性,例如,id.na ...

  6. 总结Selenium自动化测试方法(三)WebDriver定位元素方法

    三.WebDriver定位元素 推荐使用的webdriver是firefox,因为他的firebug更能可以帮助定位页面元素使用 # create a new Firefox session cls. ...

  7. WebDriver的定位元素方法

    如果把页面上的元素看作人的话,在现实世界如何找到某人呢?方法有三: 一.通过人本身的属性,例如他的姓名,手机号,身份证号,性别,这些可区别他人的属性.在web页面上的元素也有这些属性,例如,id.na ...

  8. selenium 定位元素方法

    1.通过id定位元素 写法1: element = driver.find_element_by_id("kw") 写法2: from selenium.webdriver.com ...

  9. selenium八种定位元素方法

    1.driver.find_element_by_id('su') 定位到元素的id一般id是唯一的,可以精确定位到元素 2.driver.find_element_by_name() 通过元素的na ...

随机推荐

  1. docker启动jenikns,提示 :This image is for research only, DO NOT USE

    下载的jenkins镜像有问题?

  2. session与cookie的联系与区别

    一.Session与Cookie介绍 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你 ...

  3. 深入理解netty---从偶现宕机看netty流量控制

    一.业务背景 目前移动端的使用场景中会用到大量的消息推送,push消息可以帮助运营人员更高效地实现运营目标(比如给用户推送营销活动或者提醒APP新功能). 对于推送系统来说需要具备以下两个特性: 消息 ...

  4. 深入浅出WPF-02.WPF系列目录

    WPF系列目录 2. XAML认识 3. XAML语法 4. x名称空间详解 5. 控件与布局 6. 绑定Binding-01 6. 绑定Binding-02 6. 绑定Binding-03 7. 属 ...

  5. mysql从零开始之MySQL 教程

    MySQL 教程 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数 ...

  6. 解决vue项目中遇到父组件的按钮或操作控制重新挂载子组件但是子组件却无效果的情况

    在vue项目中终会遇到需要父组件的按钮或操作控制重新挂载子组件的需求,我在新项目中就遇到这种需求.真实场景是父组件的早,中,晚三个按钮(代表三个时间段)来控制子组件的table表格列的动态加载. 子组 ...

  7. VirtualBox设置双网卡实现主宿互访及虚拟机访问互联网总结

    1,配置网络 注:VirtualBox要在全局工具-主机网络管理器里新建一个虚拟网卡. 然后虚拟机的网卡1设置为host-only,界面名称为新建的虚拟网卡(我这里为了不跟主机ip冲突,设置成了不同网 ...

  8. 记一次 .NET 某电商定向爬虫 内存碎片化分析

    一:背景 1. 讲故事 上个月有位朋友wx找到我,说他的程序存在内存泄漏问题,寻求如何解决? 如下图所示: 从截图中可以看出,这位朋友对 windbg 的操作还是有些熟悉的,可能缺乏一定的实操经验,所 ...

  9. hexo访问优化之--------gulp压缩

    hexo访问优化之--------gulp压缩 hexo生成的博客是静态html页面,当有很多静态资源时,加载速度会非常慢,且github服务器在国外,导致网页加载速度非常差 gulp压缩 gulp是 ...

  10. NOIP 模拟 七十七

    100+60+95+30; T4 一个变量打错挂了40.. T1 最大或 考虑从高到低枚举的二进制位,然后和的对应二进制位进行比较.如果两 者相同,那么不论怎么选择,,答案在这个位置上的值一定和在这个 ...