我对 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 多个下拉菜单,并为一个创建了 600 多个新定位器X
会让我发疯的。
对我来说,最好的方法是做类似的事情element.click\sendkeys\...\
使用默认部分(与.select__value-container
),但是如果我会写一些类似的东西element.deselect
然后它会改变定位器,但我不知道如何改变。
我写了这样的东西:
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__value-container]- 这就是为什么“split(”“)[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% 确定如何描述这一点FindBy
术语,看看这是否有帮助:
- Selenium/PageFactory:使用父元素的@FindBy查找子元素?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)