我正在尝试从左侧访问以下URL的所有数据列表,但无法找到类和ID的正确组合。请帮忙。以下是我的代码。
代码
[![public void f() {
driver.get("http://www.topshop.com/en/tsuk/category/clothing-427/jackets-coats-2390889/N-86tZdgl?No=0&Nrpp=20&siteId=%2F12556");
List<WebElement> faccet = driver.findElements(By.className("filter_wrapper").className("ce3_sleeve_type").tagName("li"));
System.out.println(faccet.size());
for(WebElement a : faccet)
{
String b = a.getText();
System.out.println(b);
}
}][1]][1]
答案 0 :(得分:1)
请试试这个:
List<WebElement> faccet = driver.findElements(By.CssSelector("div[class='filter_wrapper'] div div span");
答案 1 :(得分:1)
请使用以下代码获取该列表中的所有过滤条目类别 我已经使用了XPath,但您始终可以将Xpath中使用的类更改为cssSelectors
public void f()
{
List<WebElement> faccet = driver.findElements(By.xpath("//div[@class='filters jspScrollable']//div[@class='filter_group_label']/span[@class='lbl']"));
System.out.println(faccet.size());
for(WebElement a : faccet)
{
//to get the text of each element and get into view for reading
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", a);
String b = a.getText();
System.out.println(b);
}
}
答案 2 :(得分:1)
如果Selenium认为这些值在浏览器上不可见,则不会打印这些值。为了打印所有构面及其值,您可能希望在打印前滚动到每个元素。
我能够使用easytest框架(https://github.com/codezombies/easytest)和下面的代码执行您所描述的内容。
public class TopShopTest {
@Test
public void test() throws Exception {
final EasyTestOptions options = new EasyTestOptions();
options.setLogger(new NoOpLogger());
try (EasyTest easy = new EasyTest(DriverType.CHROME, options)) {
easy.start("http://www.topshop.com/en/tsuk/category/clothing-427/jackets-coats-2390889/N-86tZdgl?No=0&Nrpp=20&siteId=%2F12556");
easy.newPage(page -> {
this.openAndPrintValues(page, ".filter_group.ce3_sleeve_type");
this.openAndPrintValues(page, ".filter_group.colour");
this.openAndPrintValues(page, ".filter_group.size");
this.openAndPrintValues(page, ".filter_group.prod_fit");
this.openAndPrintValues(page, ".filter_group.ce3_jacket_style");
this.openAndPrintValues(page, ".filter_group.ce3_fabric");
this.openAndPrintValues(page, ".filter_group.ce3_collection");
this.openAndPrintValues(page, ".filter_group.ce3_clothing_brands");
this.openAndPrintValues(page, ".filter_group.accessories");
});
}
}
private void openAndPrintValues(final ActionablePage page, final String selector) {
// open
page.scrollTo(selector);
page.click(selector);
page.executeIn(selector + ":not(.collapsed)", container -> {
// get facet heading
final WebElement heading = container.getRaw(".filter_group_label span.lbl");
page.scrollTo(heading);
System.out.println("Choices under selector: " + heading.getText());
// get facet lists
container.executeIn("ul", list -> {
list.wait((Predicate<WebDriver>) t -> list.getRawList("li.refinement:not(.disabled) span.lbl").size() > 0);;
final List<WebElement> elements = list.getRawList("li.refinement:not(.disabled) span.lbl");
// scroll to end of list, selenium will not display 'unseeen' elements
page.scrollTo(elements.get(elements.size() - 1));
// pring heading and list
elements.stream().map(WebElement::getText).filter(StringUtils::isNotEmpty).forEach(System.out::println);
System.out.println(); //extra space
});
});
}
}
以下是代码的输出。
Choices under selector: Sleeve Length 3/4 Sleeve Long Sleeve Sleeveless Choices under selector: Colour Purple Red White Choices under selector: Size 10 12 14 16 XS S S/M M M/L L XL Choices under selector: Fit Regular Petite Tall Maternity Choices under selector: Jacket & Coat Style Faux Fur Coats Gilets Kimono Parkas Shacket Shearling Coats Sleeveless Jackets Smart Coats Smart Jackets Trench Coats & Macs Wool Coats Choices under selector: Fabric Cord Denim Embroidered Faux Fur Faux Leather Lace Leather Sequin Suede Velvet Choices under selector: Collection Boutique Festival Going Out Sportswear Unique Workwear Choices under selector: Clothing Brands Adidas Originals Glamorous Glamorous Petites Goldie Choices under selector: Accessories One Size