我需要在每3秒后逐个选择所有复选框。我尝试了几个带有list的xpath,但没有一个有效
尝试过xpaths:
//div/div[@class='filters-list sdCheckbox ']
使用输入和类型。但它们都没有奏效。你能帮帮我吗?
参考网站:https://www.snapdeal.com/products/storage-devices?sort=plrty - >左上角的容量
By.xpath("//a[@class='filter-name']")
这个列出了页面的所有过滤器。
答案 0 :(得分:0)
xPath "//div[@data-name='Capacity_s']/div[@class='filters-list sdCheckbox ']/input"
将获取您需要检查的所有输入元素的列表。
答案 1 :(得分:0)
有一个容器DIV可容纳某种类型的所有过滤器,例如:品牌,产能等品牌,品牌如下所示。
<div class="filter-inner " data-name="Brand">
在该容器下,所有LABEL标签都是您需要单击以选中复选框的标签。因此,我们可以使用分组作为过滤器来制作一个CSS选择器,以便只访问我们想要的复选框。
"div[data-name='Brand'] label"
由于这是我认为你会重用的东西,我会把它写成一个函数。
public static void CheckFilters(String filterGroup)
{
WebDriverWait wait = new WebDriverWait(driver, 10);
List<WebElement> filters = driver.findElements(By.cssSelector("div[data-name='" + filterGroup + "'] label"));
// System.out.println(filters.size()); // for debugging
for (int i = 0; i < filters.size(); i++)
{
filters.get(i).click();
// wait for the two overlays to disappear
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div.searcharea-overlay")));
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.filterLoader.hidden")));
// reload the element list after the refresh so you don't get StaleElementExceptions
filters = driver.findElements(By.cssSelector("div[data-name='" + filterGroup + "'] label"));
}
}
你会称之为
driver.get("https://www.snapdeal.com/products/storage-devices?sort=plrty");
CheckFilters("Brand");