webdriver location

s页面代码:

<html><body>

<form id=”loginForm”>

<input name=”username” type=”text” />

<input name=”password” type=”password” />

<input name=”continue” type=”submit” value=”login” />

<input name=”continue” type=”button” value=”clear” />

</form>

</body></html>

Xpath://开头

/html/body/form[1] 绝对路径

//form[1] HTML中的第一个form元素

//form[@id=’loginForm’] id为loginForm的元素

//form[[email protected]=’username’]

定位有name为username的input子元素的form

//input[@name=’username’]

定位input元素且其name为‘username’

//form[@id=’loginForm’]/input[1]

在id为‘loginForm’的form下,定位第一个input元素

//input[@name=’continue’][@type=’button’]

定位name为‘continue’,type为‘button’的input元素

Css定位

direct child

//div/a


css=div > a

child or subchild

//div//a


Css=div a

Id ( # 代表id)

//div[@id=’example’]//a


Css=div#example a


<input id="ag_name" type="text"...>


css=input#ag_name or css=#ag_name

Class ( .代表class)

//div[@class=’example’]//a


Css=div.example a


<button id="ext-eng=1026" class="x-right-button"...>


css=button.x-right-button

如果class里带的空格,用.来代替空格如:

<button class="x-btn-text module_picker_icon">...

css=button.x-btn-text.module_picker_icon

属性定位([属性名=值 ])

方括号 [ 属性名=属性值 ] 的方式,如:


<abbr>Abc<abbr/>


css=abbr[title="Abc"]

页面代码

<html><body>

<form id=”loginForm”>

<input class=”required” name=”username” type=”text” />

<input class=”required passfield” name=”password” type=”password” />

<input name=”continue” type=”submit” value=”login” />

<input name=”continue” type=”button” value=”clear” />

</form>

</body></html>

Css=form#loginForm 定位id为loginForm的form元素

Css=input[name=”username”] 定位username元素

Css=input.required[type=”text”]

定位class为required,类型为text的元素

Css=input.passfield 定位password元素

Css=#loginForm input[type=”button”]

定位id为loginForm 下的type为button的元素

Css=#loginForm input:nth-child(2)

定位id为loginForm 下的第二个input子元素

contains( :contains(“XXX”) )

定位一个显示OK的Button,但页面上有几个Button,id是自动生成的,class是一样的

<button id="eng-6"class="right-btn">OK</button>

<button id="eng-7"class="right-btn">Cancel</button>

css=button. right-btn:contains("OK")

:contains是个Pseudo-class,用冒号开头,括号里是内容。

Pseudo-classes是CSS提供的伪类,用来访问页面上DOM tree之外的信息,还有Pseudo-elements 用来最精准的定位页面上的某一行文字,甚至某一行文字的第一个字母。

$x("//a[contains(@href,‘http://www.dezhi.hk/student/edit-avatar‘)]")

<table><tr><td><div><span>abcd</span><span>1234</span></div></td></tr></table>

xpath=//table/tr/td/div/span[1]

css=table>tr>td>div>span:nth-child(1)

css=

div.dz_index_login2 li:nth-child(2)>input:nth-child(1)

Id(id=’loginForm’)

name(name=’username’)

默认定位器(未指定locatortype, 默认使用identifier定位)

Identifier定位(id、name)

通过link专用定位超链接

Link=continue

Link=cancel

Dom定位:document开头

Document.getElementById(‘loginForm’) 定位id为’loginForm’的元素

Document.forms[‘loginForm’] 定位form元素

Document.form[0] 定位第一个form元素

Document.forms[0].username 定位第一个form下的username元素

Document.form[0].elements[‘username’] 定位username元素

Document.form[0].elements[0] 定位username元素

Document.forms[0].elements[3] 定位continue元素

•dom=document.images[56]

•dom=function foo() { return document.links[1]; }; foo();

ancestor 选择当前结节点所有的父类元素,包括祖先元素。

td[text()=’Product’]/ancestor::table 得到table元素

. •xpath=//img[@alt=‘The image alt text‘]

•xpath=//table[@id=‘table1‘]//tr[4]/td[2]

•xpath=//a[contains(@href,‘#id1‘)]

•xpath=//a[contains(@href,‘#id1‘)]/@class

•xpath=(//table[@class=‘stylee‘])//th[text()=‘theHeaderText‘]/../td

•xpath=//input[@name=‘name2‘ and @value=‘yes‘]

•xpath=//*[text()="right"] $x("//*[text()=‘保存修改‘]")

xpath(=//input[@type=‘submit‘and @value=‘Login‘]

By.xpath=//input[@type=‘submit‘or @value=‘Login‘]"

(By.xpath ("img[@alt]"));

所有input元素中是否有属性等于”userName”,并将其返回。

Xpath=//input[@*=‘username‘] ;

$x("//a[contains(text(),‘新闻‘)]")

•link=textPattern: Select the link (anchor) element which contains text matching the specified pattern. •link=The link text

WebElement gmailLink = driver.findElement(By.linkText("GMail"))

driver.findElement(By.partialLinkText("Inbox"));

CSS Selector Reference

•css=a[href="#id3"]

•css=span#firstChild + span

List<WebElement> imagesWithAlt = driver.findElements(By.cssSelector("img[alt]")); 所有有alt属性的img

By.cssSelector("img:not([alt])") not()伪类

By.cssSelector("a[innerText=‘新闻‘]);

By.cssSelector("a[textContent=‘新闻‘]"));

jquery(prev + next) Finds all inputs that are next to a label $( "label + input" ).

prev: Any valid selector.

next: A selector to match the element that is next to the first selector.

^= 开始于 starts-with()

Input[id^=‘ctrl‘] Input[starts-with(@id,’ctrl’)]

$= 结束于 ends-with()

*= 包含 contains()

:first-child :last-child :nth-child(2)

form#loginForm :first-child

form#loginForm :nth-child(2)

public void tableTest() {

driver.get("http://www.w3school.com.cn/html/html_tables.asp");

//首先得到所有tr的集合

List<WebElement> rows =

driver.findElements(By.cssSelector(".dataintable tr"));

//验证表格的行数

assertEquals(11,rows.size());

//打印出所有单元格的数据

for (WebElement row : rows) {

//得到当前tr里td的集合

List<WebElement> cols =

row.findElements(By.tagName("td"));

for (WebElement col : cols) {

System.out.print(col.getText());//得到td里的文本

}

System.out.println();

}

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="children">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

<book category="cooking">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category="web">

<title lang="en">Learning XML</title>

<author>Erik T. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>

<book category="web">

<title lang="en">XQuery Kick Start</title>

<author>James McGovern</author>

<author>Per Bothner</author>

<author>Kurt Cagle</author>

<author>James Linn</author>

<author>Vaidyanathan Nagarajan</author>

<year>2003</year>

<price>49.99</price>

</book>

</bookstore>

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("book")[0].attributes;

document.write(x.getNamedItem("category").nodeValue);

document.write("<br />" + x.length);

输出:Children 1 book 的 "category" 属性的值,以及其属性的数量:

元素节点的 attributes 属性为属性节点的列表,x.length 为属性列表长度

在 DOM 中,每种成分都是节点。元素节点没有文本值。元素节点的文本存储在子节点中。该节点称为文本节点。获取元素文本的方法,就是获取这个子节点(文本节点)的值。属性节点拥有文本值。获取属性的值的方法,就是获取它的文本值。可以通过使用 getAttribute() 方法或属性节点的 nodeValue 属性来完成这个任务

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]

txt=x.nodeValue;

document.write(txt);

document.write("<br />");

document.write(xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue);

document.write("<br />");

document.write(xmlDoc.getElementsByTagName("year")[0].childNodes[0].nodeValue);

输出:Harry Potter J K. Rowling 2005

•第一个 <title> 元素节点的文本节点的值

为每个文本节点使用childNodes[0],即使每个元素只有一个文本节点,

这是由于 getElementsByTagName() 方法总是会返回数组

1. getElementsByTagName() -----------返回拥有指定标签名的所有元素,会返回数组。

返回 x 元素下的所有 <title> 元素:x.getElementsByTagName("title");

返回 XML 文档中的所有 <title> 元素:xmlDoc.getElementsByTagName("title");

 
nodeName

节点的名称 只读


nodeType

节点类型 只读


nodeValue

节点的值


元素节点


标签名


1


undefined


属性节点


属性的名称


2


属性的值


文本节点


#text


3


文本自身


文档节点


#document


9

 


• x.nodeName - x 的名称

• x.nodeValue - x 的值

• x.attributes - x 的属性节点

• x.parentNode - x 的父节点

• x.childNodes - x 的子节点

元素节点的 attributes 属性返回属性节点的列表


•x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素

•x.appendChild(node) - 向 x 插入子节点

•x.removeChild(node) - 从 x 删除子节点

getElementsByTagName 是方法

childNodes 和 nodeValue 是属性。

x 是一个节点对象。


xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("book")[0].childNodes;

y=xmlDoc.getElementsByTagName("book")[0].firstChild;

for (i=0;i<x.length;i++){ if (y.nodeType==1)

{//Process only element nodes (type 1)

document.write(y.nodeName + "<br />"); }

y=y.nextSibling;}


1.通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

2.获得第一个 book 元素的子节点

3.把 "y" 变量设置为第一个 book 元素的第一个子节点

4.检查每个子节点的节点类型,如节点类型是 "1",则是元素节点

5.如果是元素节点,则输出该节点的名称

6.把 "y" 变量设置为下一个同级节点,并再次运行循环

Jquery

<!DOCTYPE html>

<html><head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">

</script>

<script>

$(document).ready(function(){

$("button").click(function(){

$("p").hide();

});

});

</script>

</head>

<body>

<h2>This is a heading</h2>

<p>This is a paragraph.</p>

<p>This is another paragraph.</p>

<button>Click me</button>

</body>

</html>

CSS Selectors


Selenium WebDriver准备阶段

Eclipse自动化开发环境Maven,Git,Testng


阶段一:脚本流程及各browsers启动配置profile

Testng对webdriver的流程测试管理

各主流browsers的运行及profile配置


阶段二:数据驱动及等待

Testng参数化,properties文件驱动webdriver

WaitClass介绍 TestNG断言类


阶段三测试须知java基础

Java中的面向对象及常用类

Webdriver脚本实践PageObject化


阶段四:Webdriver API常用方法

iframe,windows的跳转

下拉列表,上传文件

Actions类鼠标右击,拖放


阶段五:页面对象化及动态xpath

PageFactory类强化

脚本中支持动态xpath

PageFactory类强化

支持动态xpath


阶段六:Webdriver与Testlink集成

1.配置使用testlink 2.了解TestLink API

Webdriver中调用TestLink api实现结果上传


阶段七:Autoit及数据库sqlite

1.Sqlite manager实用 2.Autoit工具实用


阶段八:分布并行测试Grid

1.了解Json 2.webdriver中实现多node执行脚本

时间: 2024-10-12 15:23:07

webdriver location的相关文章

webDriver API——第12部分WebElement

class selenium.webdriver.remote.webelement.WebElement(parent, id_) Bases: object Represents a DOM element. Generally, all interesting operations that interact with a document will be performed through this interface. All method calls will do a freshn

webdriver函数

import sys; print('%s %s' % (sys.executable or sys.platform, sys.version)) PyDev console: starting. C:\Python27\python.exe 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] import subprocess import time import scrapy from selenium i

WebDriver API——第1部分

The API definitions in this chapter shows the absolute location of classes. However the recommended import style is as given below: from selenium import webdriver Then, you can access the classes like this: webdriver.Firefox webdriver.FirefoxProfile

Selenium2+Python:Webdriver API速记手册

由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需. 参考:虫师<Selenium2自动化测试实战>,和http://selenium-python.readthedocs.io/api.html 1 #coding=utf-8 2 from selenium import webdriver 3 driver=webdriver.Firefox() 4 driver.get('http://www.baidu

selenium2 webdriver 常用的python 函数

新建实例driver = webdriver.Chrome() 1.通过标签属性Id查找元素 方法:find_element_by_id(element_id) 实例:driver.find_element_by_id("iptUsername") 2.通过标签属性name查找元素 方法:find_element_by_name(element_name) 实例:driver.find_element_by_id("inputPwname") 3.通过标签Xpath

Selenium2.0 Webdriver 随笔

Webdriver can't action the element when the element is out of view 1. Scroll to the element use JavaScript to scroll the element to view [csharp] view plaincopy ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", el

Selenium Webdriver重新使用已打开的浏览器实例

本文中的样例均使用SoapUI ,关于SoapUI+Webdriver 的配置,请看上一篇: http://blog.csdn.net/wwwqjpcom/article/details/51174664 我弄这个的本意是为了在SoapUI中更好地编写自动化用例,因为我的业务流程有的很长,有7-8个页面. 我想把代码不集中在一个Groovy 脚本里,想在第二个脚本中继续使用第一个脚本中打开的浏览器.这样便于 维护和定位问题. 也还有一种情况是我打开了浏览器,,操作了系统到某一个界面后,我写了这个

selenium WebDriver 截取网站的验证码

在做爬虫项目的时候,有时候会遇到验证码的问题,由于某些网站的验证码是动态生成的,即使是同一个链接,在不同的时间访问可能产生不同的验证码, 一 刚开始的思路就是打开这个验证码的链接,然后通过java代码get请求保存验证码图片到本地,然后用打码工具解析验证码,将验证码自动输入验证框就 可以把验证码的问题解决了,但是问题来,每次的请求同一个地址,产生的验证码图片是不一样的,所以这种方法行不通.所以只能将图片先用selenium  WebDriver 截取到本地,然后用打码工具解析ok ,自动填写验证

selenium webdriver定位不到元素的五种原因及解决办法

转自http://www.51testing.com/html/87/300987-831171.html 1.动态id定位不到元素for example:        //WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));        WebElement xiexin_element = driver.findElement(By.xpath("//span[c