6.2 Selenium定位元素

本文详细介绍了SeleniumWebDriver提供的多种元素定位策略,包括id、name、class、tagname、linktext、CSS和Xpath定位,通过实例展示了如何使用这些策略进行网页元素的查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用Selenium时,往往需要先通过定位器找到响应的元素,然后再进行其他操作。Selenium WebDriver提供多种定位策略,如id定位、name定位、class定位、tag name定位、link text定位、Xpath定位和CSS定位等。下面将分别介绍这些定位策略。

1.id定位
id定位,即通过id在网页中查询元素,使用简单且常用。例如,在百度首页的搜索框输入“医药库”后点击搜索按钮进行搜索。搜索框和搜索按钮元素HTML代码分别如下。

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

<input type="submit" id="su" value="百度一下" class="bg s_btn">
//程序6-3
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement searchBox = driver.findElement(By.id("kw"));
        searchBox.sendKeys("医药库");
        WebElement searchButton = driver.findElement(By.id("su"));
        searchButton.submit();
        //为了查看操作效果,注释关闭浏览器的代码
        //driver.quit();
    }
}

2.name定位
当元素中包含name属性时,可以使用name进行定位。以上述案例为例,通过name定位获取百度输入框元素,然后输入“医药库”进行搜索。

//程序6-4
public class Location {
    public static void main(String[] args) throws {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement searchBox = driver.findElement(By.name("wd"));
        searchBox.sendKeys("医药库");
        WebElement searchButton = driver.findElement(By.id("su"));
        searchButton.submit();
        //为了查看操作效果,注释关闭浏览器的代码
        //driver.quit();
    }
}

3.class定位
当元素中包含class属性时,可以使用class进行定位。仍然以上述案例为例,通过class定位获取百度输入框元素,然后输入“医药库”进行搜索。

//程序6-5
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement searchBox = driver.findElement(By.className("s_ipt"));
        searchBox.sendKeys("医药库");
        WebElement searchButton = driver.findElement(By.id("su"));
        searchButton.submit();
        //为了查看操作效果,注释关闭浏览器的代码
        //driver.quit();
    }
}

4.tag name定位
Selenium WebDriver也提供了tag name(标签名称)定位的方法,使用标签名称可以很方便地定位一些元素。通过tagName来搜索元素,会返回多个元素,因此需要使用findElements()。如通过tagName来搜索百度首页中所有input元素,结合type属性,过滤出文本输入框元素。

//程序6-6
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        List<WebElement> buttons = driver.findElements(By.tagName("input"));
        for (WebElement webElement : buttons) {
            if (webElement.getAttribute("type").equals("text")) {
                System.out.println(webElement);
            }
        }
        driver.quit();
    }
}

5.link text定位
link text定位,是通过链接文本定位元素的。如通过link text来定位百度首页的登录链接,登录链接元素的HTML代码如下所示。

<a href="https://passport.baidu.com/v2/?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2F&amp;sms=5" name="tj_login" class="lb" onclick="return false;">登录</a>
//程序6-6
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement login = driver.findElement(By.linkText("登录"));
        System.out.println("link text:" + login.getText());
        driver.quit();
    }
}

如果想用一些关键字匹配的时候,可以使用partialLinkText()这个方法,通过部分超链接文字来定位元素。

//程序6-7
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement login = driver.findElement(By.partialLinkText("登"));
        System.out.println("link text:" + login.getText());
        driver.quit();
    }
}

6.CSS定位
4.1 Jsoup解析小节中,介绍了CSS选择器,这里不再赘述。Selenium WebDriver在定位元素时,也可以使用CSS选择器。如通过CSS选择器来定位百度首页的登录链接。

//程序6-8
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement login = driver.findElement(By.cssSelector("#u1 > a.lb"));
        System.out.println("link text:" + login.getText());
        driver.quit();
    }
}

7.Xpath定位
4.2 JsoupXpath解析小节中,介绍了Xpath表达式,这里不再赘述。Selenium WebDriver支持使用Xpath表达式定位元素。如通过Xpath表达式来定位百度首页的登录链接。

//程序6-9
public class Location {
    public static void main(String[] args) {
        WebDriver driver  = WebDriverUtils.getWebDriver();
        driver.get("http://www.baidu.com");
        WebElement login = driver.findElement(By.xpath("//*[@id=\"u1\"]/a[8]"));
        System.out.println("link text:" + login.getText());
        driver.quit();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值