在硒中使用自己的选择器的利弊

时间:2016-07-27 13:03:08

标签: selenium selector

我想实现自己的By类,以便拥有自定义选择器。使用自定义选择器的优缺点是什么

DEV代码

<button class="btn js-AddNuts" type="button" testid="addbutton">

此处选择器为testid

原因:我们计划为DEV代码中的所有元素设置测试特定选择器和设计名称,以便在DEV中更改任何内容时不会影响测试。

2 个答案:

答案 0 :(得分:1)

在这种情况下无需创建自定义定位器(或者我遇到或可以想到的任何情况)。您只需使用以下使用CSS选择器的代码即可。

By.cssSelector("button[testid='addbutton']")

我建议您花一些时间阅读和学习CSS选择器。它们非常强大。

CSS Selector Reference

CSS Selector Tips

答案 1 :(得分:0)

如您所知,创建自己的定位器没有问题,Selenium提供了创建自定义定位器的功能。当您要查找元素By.idBy.name等时,内部使用selenium来使用xPath定位元素。因此,您可以通过扩展By类来创建自己的定位器。

如果你想创建一个使用testid定位元素的自定义定位器,你应该创建如下(假设你使用的是java): -

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebElement;

class ByTestId extends By {

    private final String testId;

    public ByTestId(String testId) {
        this.testId = testId;
    }

    @Override
    public List<WebElement> findElements(SearchContext context) {
        return context.findElements(By
                .xpath(".//*[@testid = '"+testId+"']"));
    }

    @Override
    public WebElement findElement(SearchContext context) {
        return context.findElement(By
                .xpath("//*[@testid = '"+testId+"']"));
    }
}

现在,您可以使用testid轻松找到元素,如下所示: -

//for single webelement
WebElement element = driver.findElement(new ByTestId("addbutton"));

//for list of webelements
List<WebElement> elements = driver.findElements(new ByTestId("addbutton"));

注意:您还可以使用By将自定义By.cssSelector课程中的元素定位为:By.cssSelector("*[testid = '"+testId+"']")

希望它有所帮助.. :)