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/