WebElement类可支持查询子类元素。假设页面上有一些重复的元素,它们有不同的父元素。我们可以先定位其父元素,然后定位其子元素,方法如下:
WebElement father = driver.findElement(By.id("father"));
WebElement son = father.findElement(By.linkText("xxx"));
也可以将他们缩写成一行:
1 WebElement son = driver.findElement(By.id("father")).findElement(BylinkText("xxx"));
NoSuchElementFoundException
findElement()和findElements()方法找不到相应的元素时,会抛出该异常。
=========================================================================
package rjcs;
import java.util.List;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.SeleneseTestNgHelper;
public class findby
{
public static void main(String[] args)
{
System.setProperty("webdriver.firefox.bin","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //设置火狐的安装路径,防止系统找不到
FirefoxDriver driver = new FirefoxDriver(); //初始化FireFox浏览器实例,并打开浏览器
try
{
driver.manage().window().maximize(); //最大化窗口
Thread.sleep(5000);
driver.manage().window().maximize(); //最大化窗口
Thread.sleep(5000);
driver.get("https://www.baidu.com"); //打开一个网址,方法一
Thread.sleep(5000);
List<WebElement> myList = driver.findElementsByClassName("mnav"); //获取class的所有
for(int i=0; i < myList.size();i++)
{
System.out.print(myList.get(i).getText()); //打印连接文字
System.out.print(" ");
System.out.println( myList.get(i).getAttribute("href")); //打印连接网址
}
Thread.sleep(5000);
}catch (Exception e)
{
e.printStackTrace();
}finally
{
driver.quit();
}
}
}
执行结果:
新闻 http://news.baidu.com/
hao123 https://www.hao123.com/
地图 http://map.baidu.com/
视频 http://v.baidu.com/
贴吧 http://tieba.baidu.com/
学术 http://xueshu.baidu.com/