【javawb】使用findElements方法来定位元素

findElements()方法会返回匹配指定查询条件的WebElements的集合(即:可以得到匹配指定规则的集合。如果没有找到则返回为空。

 

 

JAVA实例代码:

package com.example.tests;

import static org.junit.Assert.*;

import java.util.*;

import org.junit.*;

import org.openqa.selenium.*;

import org.openqa.selenium.ie.InternetExplorerDriver;

public class Selenium2

{

@Test

public void test()

{

WebDriver driver = new InternetExplorerDriver();

driver.get("http://www.baidu.com");

List links = driver.findElements(By.cssSelector("#nv a"));

//验证链接数量 

assertEquals(10, links.size());

//打印href属性 

for (int i = 0; i < links.size(); i++)

{

System.out.println(links.get(i).getAttribute("href"));

}

driver.close();

}

u 定位链接

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

assertEquals("http://mail.google.com/",gmailLink.getAttribute("href"));

 

通过部分链接名定位链接

WebElement inboxLink =   

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

System.out.println(inboxLink.getText());     

 

u 通过标签名称定位元素

WebElement table = driver.findElement(By.id("summaryTable"));

List rows = table.findElements(By.tagName("tr"));

assertEquals(10, rows.size());

 

u 使用CSS选择器定位元素

 使用绝对路径定位元素:

WebElement userName = driver.findElement(By.cssSelector("html body  div div form input"));

 

使用相对路径定位元素:

当我们使用CSS选择器来查找元素的时候,我们可以使用class属性来定位元素。我们可以先指定一个HTML的标签,然后加一个“.”符号,跟上class属性的值,方法如下:

WebElement loginButton =

driver.findElement(By.cssSelector("input.login"));

 

ID选择器定位元素:

先指定一个HTML标签,然后加上一个“#”符号,跟上id的属性值,如下所示:

WebElement userName =  

driver.findElement(By.cssSelector("input#username"));

 

使用其他属性的选择器定位元素:

使用name选择器:

WebElement userName =  

driver.findElement(By.cssSelector("input[name=username]"));

使用alt选择器:

WebElement previousButton =   

driver.findElement(By.cssSelector("img[alt='Previous']"));

 

使用多个属性选择器定位元素:

WebElement previousButton = driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));

 

u 使用XPath定位元素

使用绝对路径:

WebElement userName =

driver.findElement(By.xpath("html/body/div/div/form/input"));

 

使用相对路径:

处于DOM中第一个元素:

WebElement userName = driver.findElement(By.xpath("//input"));

使用索引定位DOM中的第二个元素:

WebElement passwd=driver.findElement(By.xpath("//input[2]"));

 

使用Xpath和属性值定位元素:

WebElement previousButton = driver.findElement

(By.xpath("//input[@type='submit'and @value='Login']"));

 

 

u 使用jQuery选择器

以百度首页为例,百度首页没有jQuery库。我们想定位百度导航栏上面的所有超链接元素,并输出结果。

package com.example.tests;

import static org.junit.Assert.*;

import java.util.*;

import org.junit.*;

import org.openqa.selenium.*;

import org.openqa.selenium.ie.InternetExplorerDriver;

public class Selenium2 {

WebDriver driver = new InternetExplorerDriver();

JavascriptExecutor jse = (JavascriptExecutor)driver;

@Test

public void jQueryTest() {

driver.get("http://www.baidu.com/");

injectjQueryIfNeeded();

List elements =

(List)jse.executeScript

("return jQuery.find('#nv a')");

assertEquals(7,elements.size()); //验证超链接的数量 

for (int i = 0; i < elements.size(); i++) {

System.out.print(elements.get(i).getText() + "");

}

driver.close();

}

private void injectjQueryIfNeeded() {

if (!jQueryLoaded())

injectjQuery();

}

//判断是已加载jQuery

public Boolean jQueryLoaded() {

Boolean loaded;

try {

loaded = (Boolean)jse.executeScript("return " +

"jQuery()!=null");

} catch (WebDriverException e) {

loaded = false;

}

return loaded;

}

//通过注入jQuery

public void injectjQuery() {

jse.executeScript(" var headID = "

+"document.getElementsByTagName(\"head\")[0];"

+ "var newScript = document.createElement('script');"

+ "newScript.type = 'text/javascript';"

+ "newScript.src = "

+"'http://ajax.googleapis.com/ajax/"

+"libs/jquery/1.7.2/jquery.min.js';"

+ "headID.appendChild(newScript);");

}

}

 

injectjQueryIfNeeded()方法首先通过jQueryLoaded()方法来判断网页中是否加有jQuery对象。如果没有,再调用injectjQuery()方法通过增加一个

你可能感兴趣的:(javawb)