一、通过ID查找元素
在WebDriver中通过ID查找元素的Java示例代码如下:
public class testBaiDuById
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com");
WebElement searchBox = driver.findElement(By.id("kw"));
//在搜索框中输入字符串test Baidu By Id。
searchBox.sendKeys("test Baidu By Id");
WebElement searchButton = driver.findElement(By.id("su"));
searchButton.submit();
driver.close();
}
}
findElement()方法通过By.id() 在页面上查找指定ID的元素,并将查找结果返回给一个WebElement实例对象并保存下来。
WebElement对象具有多种行为,如click、clear、submit、wait等操作。
WebElement searBox = driver.findElement(By.id(“kw”));
通过ID为su来查找搜索按钮。代码如下:
WebElement searButton = driver.findElement(By.id(“su”));
二、通过Name查找元素
Selenium WebDriver 中通过Name查找豆瓣主页上搜索框元素的java示例代码如下:
public class testDoubanByName
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.douban.com");
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("test Douban By Name");
searchBox.submit();
driver.close();
}
}
三、通过ClassName查找元素
selenium WebDriver中通过ClassName查找淘宝主页上搜索框的java示例代码如下:
public class testTaobaoByClassName
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.taobao.com");
WebElement searchBox = driver.findElement(By.className("search-combobox-input"));
searchBox.sendKeys("test Taobao By ClassName");
searchBox.submit();
driver.close();
}
}
四、通过TagName查找元素
通过TagName来查找元素的方式与前述通过ID或Name查找元素的方式略有不同,其原因是在同一个页面上具有相同TagName元素可能一个都没有,也可能有多个。因此建议在使用TagName为查找元素的条件时,使用findElements()来替代findElement()函数。
以小米主页为例,得到TagName为script的元素个数的示例代码如下:
public class testXiaomiByTagName
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.xiaomi.com");
list<WebElement> scriptList = driver.findElements(By.tagName("script"));
/*通过TagName为script来调用findElements()方法,找到小米主页上所有的script元素并保存到WebElement实例对象列表中*/
System.out.println("There are"+scriptList.size()+"scripts on Xiaomi's main page.");
driver.close();
}
}
五、通过LinkText查找元素
以CSDN的主页为例,页面最下面有一个“联系方式”的链接地址,其HTML代码如下:
<a href="http://www.csdn.net/company/contact.html"target="_ blank">联系方式</a>
如上所示,页面上的HTML链接元素一般由标签来表示,即anchor的缩写。其中href表示该链接被点击后会跳转的页面地址。Selenium可以通过anchor上的文本信息来查找该元素并进行操作。实例代码如下:
public class testCsdnByLinkText
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.csdn.com");
WebElement contactLink = driver.findElement(By.linkText("联系方式"));
contactLink.click();
driver.close();
}
}
六、通过PartialLinkText查找元素
依旧以CSDN的主页为例,页面最下方有一个“联系方式”的链接地址,其HTML代码如下
<a href="http://www.csdn.net/company/contact.html"target="_ blank">联系方式</a>
selenium可以通过anchor上的部分文本信息来查找该元素并进行操作,如通过“联系”二字来查找该链接地址。示例代码如下:
public class testCsdnByPartialLinkText
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.csdn.com");
WebElement contactLink = driver.findElement(By.partialLinkText("联系方式"));
contactLink.click();
driver.close();
}
}
注意:findElemen()方法只会返回页面上第一个满足PartialLinkText为“联系”的元素。如果希望找到所有包含部分文本为“联系”的链接元素,则使用findElements()方法来替代findElement()方法。
七、通过CSS选择器查找元素???????怎么找到对应的CSS的路径
以谷歌主页的搜索按钮为例,其HTML代码如下:
<input value="Goole搜索" jsaction="sf.chk"name="bank"type="submit">
对应的CSS路径代码如下:
#lst-ib
Selenium WebDriver中通过CSS查找元素的Java示例代码如下:
public class testGooleByCssSelector
{
public static void main(String[] args)
{
WebDriver driver = new FirefoxDriver();
driver.get("http://www.goole.com");
WebElement searchBox = driver.findElement(By.CssSelector("#lst-ib"));
searchBox.sendKeys("webdriver");
searchBox.submit();
driver.close();
}
}
八、通过XPath查找元素
以谷歌主页为例,可以通过XPath来查找到搜索框和搜索按钮,并且对于期望的结果,也可以通过XPath来查找。
Selenium WebDriver中通过Xpath查找元素的完整示例代码如下:
package com.learningselenium.findelement;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;
public class testXPath
{
WebDriver driver;
@BeforeClass
public void setUp()
{
System.setProperty("webdriver.chrome.driver","/Selenium 2/selenium/chromedriver");
driver = new ChromeDriver();
}
@AfterClass
public void tearDown()
{
driver.close();
driver.quit();
}
@Test
public void testGoole() throws interruptedException
{
driver.get("http://www.google.com/");
//通过XPath查找到搜索框并在其中输入selenium
WebElement searchBox=driver.findElement(By.xpath("//*[@id = \"lst-ib\"]"));
searBox.sendKeys("selenium");
//通过XPath查找到搜索按钮并单击它
WebElement searchButton=driver.findElement(By.xpath("//*[@id = \"tsf\"]/div[2]/div[3]/center/input[1]"));
searchButton.click();
//等待指定XPath的页面元素的出现,这里使用了selenium的Wait对象和期待条件visibilityOfElementlocated.
Wait<WebDriver> wait = new WebDriverWait(driver,30);
wait.until(visibilityOfElementLocated(By.xpath("//*[@id=\"rso"\]/li[1]/div/h3/a/em")));
}
}
九、通过jQuery查找元素
1、处理已经加载jQuery库的页面
Java示例代码片段如下:
WebDriver driver = new ChromeDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
driver.get("http://www.jquery.org/");
List<WebElement> elements =(List<WebElement>)jse.executeScript ("return jQuery.find('.menu-item')");
assertEquals(10,elements.size());
assertEquals("Members",elements.get(2).getText());
driver.clsoe();
上述代码使用了jQuery的find()方法来查找元素,在selenium的java代码中,需要调用JavascriptExecutor类来执行jQurey的find( )方法。
2、处理未加载jQuery库的页面
虽然jQuery是非常流行的库,但并不是所有的网站都加载并使用到该库。对于未加载jQuery库的页面,如果也希望利用jQuery的优势来查找页面元素,则可以通过其他方式来达到目的。也就是在加载页面时手动注入jQuery库。注入代码如下:
private void injectjQueryIfNeeded()
{
if(! jQueryLoaded()){
injectjQuery();
}
}
public Boolean jQueryLoaded()
{
boolean loaded = true;
try{
loaded = (Boolean) jse.executeScript("return jQuery()!=null");
}catch(WebDriverException e){
loaded = false;
}
return loaded;
}
public void injectjQuery()
{
//load jQuery dynamically in the head of webpage
jse.executeScript(
"var heaID = document.getElementsByTagName(\"head\")[0];"+
"var newScript = document.creatElements('script');"+
"newScript.type = 'text/javascript';" +
"newScript.src = 'http://ajax.googleapis.com/ajax/libs"+
"/jquery/1.10.1/jquery.min.js';"+
)
}
injectjQueryIfNeeded( )方法会调用jQueryLoaded( )来检测当前页面是否已经加载jQuery库。如果页面尚未加载jQuery库,injectjQueryIfNeeded( )会调用injectjQuery方法,