Это было забавное маленькое упражнение ...
Вместо того, чтобы пытаться придумать свой собственный код сортировки, вы должны использовать установленный алгоритм сортировки.Я выбрал пузырьковую сортировку, но вы можете выбрать любую, какую захотите.Если вы просто сортируете несколько элементов, это должно работать нормально.Он запускается всего за несколько секунд.
Основной код
String url = "http://jqueryui.com/sortable/";
driver.get(url);
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe.demo-frame")));
List<WebElement> items = driver.findElements(By.cssSelector("#sortable > li"));
bubbleSort(items);
Метод пузырьковой сортировки
static void bubbleSort(List<WebElement> items)
{
int n = items.size();
boolean swapped;
for (int i = 0; i < n - 1; i++)
{
swapped = false;
for (int j = 0; j < n - i - 1; j++)
{
int compare = items.get(j).getText().compareTo(items.get(j + 1).getText());
if (compare < 0)
{
swap(items.get(j + 1), items.get(j));
swapped = true;
}
}
// break if no elements were swapped
if (swapped == false)
{
break;
}
}
}
и, наконец, метод поддержки для обмена элементами
public static void swap(WebElement source, WebElement target)
{
new Actions(driver).dragAndDrop(source, target).perform();
}
Я просто запускал этот код несколько раз, и он работает просто отлично.Он сортирует элементы в обратном порядке (поэтому вам не нужно смешивать их вручную).Это не самый эффективный способ сделать это, но я хотел иметь возможность наблюдать за работой пузырьковой сортировки, чтобы вы могли видеть каждый обмен.Если вы хотите, чтобы это происходило быстрее, вы можете извлечь текст из элементов, отсортировать этот список, а затем выровнять элементы по их отсортированному тексту, так что вам нужно только сделать n
swaps.