Java CSS定位器选择反应问题

Java CSS定位器选择反应问题,java,css,selenium,Java,Css,Selenium,我有一个CSS定位器的问题。我有一个独特的父母标签,从那里我可以得到我需要的孩子 @FindBy(css = "[data-qa="select-Seller"] .select__value-container") Webelement seller; public Webelement getSeller(){ return seller; } 该类类似于所有下拉列表,因此唯一将更改的值是data qa。而且,有时我需要取消选择它们 为此,我有一个X定位器 @FindBy(css = "[

我有一个CSS定位器的问题。我有一个独特的父母标签,从那里我可以得到我需要的孩子

@FindBy(css = "[data-qa="select-Seller"] .select__value-container")
Webelement seller;
public Webelement getSeller(){ return seller; }
该类类似于所有下拉列表,因此唯一将更改的值是
data qa
。而且,有时我需要取消选择它们

为此,我有一个
X
定位器

@FindBy(css = "[data-qa="select-Seller"] [data-qa=icon-x]). 
正如你所看到的,第一部分仍然是一样的

所以我的问题是,是否有可能编写一些方法(或任何其他方式)来更改定位器的最后一部分?我有600多个下拉列表,为
X
创建600多个新定位器会让我发疯

对我来说,做
元素之类的事情的最好方法是。单击\sendkeys\…\
使用默认部分(使用
。选择\uu value-container
),但是如果我要写
元素之类的东西。取消选择
,那么它将更改定位器,但我不知道如何更改

我写了这样的东西:

public void clearDropdown (WebElement element){
        String selector = element.toString();
        selector = selector.split(" ")[8];
        driver.findElement(By.cssSelector(selector + " [data-qa=icon-x]")).click();
    }
[[ChromeDriver:MAC上的chrome(99c7e4e38147c9f61da0c83c5ef1b992)]->css选择器:[data qa='select-Seller'].select\u value-container]-这就是为什么“拆分(“”[8]”

但我认为这不是解决问题的正确方法


谢谢您的建议。

您不必尝试连接CSS选择器

如果您可以将父元素定义为
WebElement
,则会更容易:

WebElement seller = driver.findElement(By.cssSelector("[data-qa=select-Seller]"));
然后找到其中的元素:

WebElement sellerDropdown = seller.findElement(By.cssSelector(".select__value-container"));

WebElement closeButton = seller.findElement(By.cssSelector("[data-qa=icon-x]"));
请注意,我们是如何为子元素使用
seller.findElement
而不是
driver.findElement


我不能100%确定如何用
术语来描述这一点,请看这是否有帮助:


您的
clearDropdown()方法的想法是正确的,只有一种更有效的方法才能实现

卖方将被定义为母公司,例如:

@FindBy(css = "[data-qa='select-Seller']")
Webelement sellerParent; // probably needs a better name
然后,您将为每个要获取或与之交互的元素定义一个基于父元素的方法

public void clearDropdown(WebElement element)
{
    element.findElement(By.cssSelector("[data-qa=icon-x]")).click();
}

// probably needs a better name
public WebElement getChild(WebElement element)
{
    return element.findElement(By.cssSelector(".select__value-container"));
}
现在你就这么说吧

clearDropdown(sellerParent);


对于您想要的任何父元素。

我不这样做的原因-因为我现在有600多个下拉列表。这样,我就可以完成2400多行代码。。。
WebElement seller = getChild(sellerParent);