selenium 定位元素

一、单个元素的定位方式:

By.className(className))
By.cssSelector(selector)
By.id(id)
By.linkText(linkText)
By.name(name)
By.partialLinkText(linkText)
By.tagName(name)
By.xpath(xpathExpression)


例子如下:

public static void main(String[] args) {

 WebDriver driver = new FirefoxDriver();
 driver.get("http://www.51.com");
 WebElement element = driver.findElement(By.className("t_label"));
 System.out.println(element.getTagName());

}
//使用ID定位
WebElement element = dr.findElement(By.id("passport_51_user"));
 System.out.println(element.getAttribute("title"))

//使用CSS选择器定位
WebElement e1 = dr.findElement(By.cssSelector("#passport_51_user"));
//使用name定位
WebElement e = dr.findElement(By.name("passport_51_user"));

 


二、多个元素的定位;

1. import java.io.File;
2. import java.util.List;
3.
4. import org.openqa.selenium.By;
5. import org.openqa.selenium.WebDriver;
6. import org.openqa.selenium.WebElement;
7. import org.openqa.selenium.firefox.FirefoxBinary;
8. import org.openqa.selenium.firefox.FirefoxDriver;
9.
10. public class FindElementsStudy {
11.
12. /**
13. * 
14. */
15. public static void main(String[] args) {
16. WebDriver driver = new FirefoxDriver();
17. driver.get("http://www.51.com");
18.
19. //定位到所有<input>标签的元素,然后输出他们的id
20. List<WebElement> element = driver.findElements(By.tagName("input"));
21. for (WebElement e : element){
22. System.out.println(e.getAttribute("id"));
23. }
24.
25. driver.quit();
26. }
27. }

 三、iframe的定位

Html 代码
main.html

<html>
<head>
<title>FrameTest</title>
</head>
<body>
<div id = "id1">this is a div!</div>
<iframe id = "frame" frameborder="0" scrolling="no"
style="left:0;position:absolute;" src = "frame.html"></iframe>
</body>
</html>

frame.html
<html>
<head>
<title>this is a frame!</title>
</head>
<body>
<div id = "div1">this is a div,too!</div>
<label>input:</label>
<input id = "input1"></input>
</body>
</html>

Java 代码

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class FameStudy {

public static void main(String[] args) {
  WebDriver dr = new FirefoxDriver();
  String url = "\\Your\\Path\\to\\main.html";
  dr.get(url);
  //在default content 定位id="id1"的div
  dr.findElement(By.id("id1"));
  //此时,没有进入到id="frame"的frame 中时,以下两句会报错
  dr.findElement(By.id("div1"));//报错
  dr.findElement(By.id("input1"));//报错
    //进入id="frame"的frame 中,定位id="div1"的div 和id="input1"的输入框。
    //重点使用下面的
.switchTo()方法
  dr.switchTo().frame("frame"); dr.findElement(By.id("div1")); dr.findElement(By.id("input1")); //此时,没有跳出frame,如果定位default content 中的元素也会报错。
  dr.findElement(By.id(
"id1"));//报错 //跳出frame,进入default content;重新定位id="id1"的div
  dr.switchTo().defaultContent();
  dr.findElement(By.id(
"id1"));
}
}

 四、alert confirm ,prompt对话框的定位

<html>
 <head>
 <title>Alert</title>
 </head>
 <body>
 <input id = "alert" value = "alert" type = "button" onclick = "alert('欢迎!请按确认继续!');"/>
 <input id = "confirm" value = "confirm" type = "button" onclick = "confirm('确定吗?');"/>
 <input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('请输入你的名字:','请输入你的名字'); document.write(name) "/>
 </body>
</html>
public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        String url = "file:///C:/Users/leixiaoj1/Desktop/test.html";
        driver.get(url);
        //点击第一个按钮,输出对话框上面的文字,然后叉掉
        driver.findElement(By.id("alert")).click();
        Alert alert = driver.switchTo().alert();
        String text = alert.getText();
        System.out.println(text);
        alert.dismiss();
        //点击第二个按钮,输出对话框上面的文字,然后点击确认
        driver.findElement(By.id("confirm")).click();
        Alert confirm = driver.switchTo().alert();
        String text1 = confirm.getText();
        System.out.println(text1);
        confirm.accept();
        //点击第三个按钮,输入你的名字,然后点击确认,最后
        
        driver.findElement(By.id("prompt")).click();
        Alert prompt = driver.switchTo().alert();
        String text2 = prompt.getText();
        System.out.println(text2);
        prompt.sendKeys("jarvi");//输入值
        prompt.accept();//保存
}
                

 五、定位下拉框:

 

public class SelectsStudy {
/**
* @author*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.firefox.bin","D:\\ProgramFiles\\Mozilla Firefox\\firefox.exe");
WebDriver dr = new FirefoxDriver();
dr.get("http://passport.51.com/reg2.5p");
//通过下拉列表中选项的索引选中第二项,即2011 年 Select selectAge = new Select(dr.findElement(By.id("User_Age"))); selectAge.selectByIndex(2);
//通过下拉列表中的选项的value 属性选中"上海"这一项 Select selectShen = new Select(dr.findElement(By.id("User_Shen"))); selectShen.selectByValue("上海");
//通过下拉列表中选项的可见文本选 中"浦东"这一项 Select selectTown = new Select(dr.findElement(By.id("User_Town"))); selectTown.selectByVisibleText("浦东");
//这里只是想遍历一下下拉列表所有选项,用click 进行选中选项 Select selectCity = new Select(dr.findElement(By.id("User_City"))); for(WebElement e : selectCity.getOptions()) e.click(); } }

 

从上面可以看出,对下拉框进行操作时首先要定位到这个下拉框,new 一个Selcet 对象,然后对它进行操作。
posted @ 2017-01-04 11:00  日月心诚  阅读(278)  评论(0编辑  收藏  举报