Java CSS定位器选择反应问题
我有一个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 = "[
@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);