基本上,我了解它是如何工作的,但我无法将它们组合在一起。所以我有cssSelector所有排序的元素。
我知道这些元素的确切数量(12)。我findElements()用来找到它们,它返回列表。但是List呢?- int, String?
Selector导致正确的数字价格,但不明白我应该如何以及在哪里使用该 List ?如何将其放入循环中以检查元素是否已排序?
我使用Selenide,但如果你向我提供提示\指南如何做到这Selenium一点就可以了。
谢谢!
(这是在硒中)
findElements()将为您提供WebElements. 您可以对其中的每一个执行操作。
既然你想对它们进行排序,我假设你得到的元素中有某种文本。假设我们有这个HTML。
<span>3</span>
<span>7</span>
<span>6</span>
<span>4</span>
<span>8</span>
findElements()可以返回所有这些跨度。所以我会得到一个List包含 5 WebElements。我可以WebElements用getText(). 例子:
List<Integer> values = new ArrayList<Integer>();
List<WebElement> elements = driver.findElements(By.cssSelector('span'));
for (WebElement element : elements) {
values.add(Integer.parseInt(element.getText());
}
现在您将拥有一个包含值的列表。我将把排序留给你,因为你可以通过很多方法来做到这一点。
如果您想验证找到的价格list是否符合要求,请sorted按以下方式使用:-
Guava提供了这个功能来sorting通过它的Ordering类进行验证:-
假设您已经list从包含[1,2,3,4,5,6,7,8]值的页面中获得了价格,您可以使用Guava库来验证该列表是否sorted仅在一行中,如下所示:-
boolean isSorted = Ordering.natural().isOrdered(list);
System.out.println(isSorted);
或者
您也可以使用自己的generic方法进行验证,如下所示:-
private static <T extends Comparable<? super T>> boolean isSorted(List<T> list){
for (int i = 0; i < list.size()-1; i++) {
if(list.get(i).compareTo(list.get(i+1))> 0){
return false;
}
}
return true;
}
boolean isSorted = isSorted(list);
System.out.println(isSorted);
注意: - 如果它打印true意味着你list是sorted为了否则not
希望它会帮助你... :)
public boolean VerifyingSort() {
List<WebElement> theList=driver.findElements(By.xpath("//*[@id=\"qv-drop\"]/li"));
int FisrtfinalPrice=0;
String FirstPrice=driver.findElement(By.xpath("//*[@id=\"qv-drop\"]/li[1]/div[1]/div[2]/a/div[2]/div[1]")).getText();
FirstPrice=FirstPrice.replaceAll("[\\-\\?\\+\\.\\^:,\\\u20B9]","");
FirstPrice = FirstPrice.split(" ")[1];
FisrtfinalPrice=Integer.parseInt(FirstPrice);
for(int SortCheckNumber=2;SortCheckNumber<theList.size()-1;SortCheckNumber++) {
String nextPrice=driver.findElement(By.xpath("//*[@id=\"qv-drop\"]/li["+SortCheckNumber+"]/div[1]/div[2]/a/div[2]/div[1]")).getText();
nextPrice=nextPrice.replaceAll("[\\-\\?\\+\\.\\^:,\\\u20B9]","");
nextPrice = nextPrice.split(" ")[1];
int finalNextPrice=Integer.parseInt(nextPrice);
if(finalNextPrice>FisrtfinalPrice) {
System.out.println("notSorted");
return false;
}else {
FisrtfinalPrice=finalNextPrice;
}
}
System.out.println("allSorted");
return true;
}