查找页面元素

一、通过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方法,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值