Webdriver - Найти первые x элементов с тем же классом - PullRequest
0 голосов
/ 09 мая 2018

Может кто-нибудь помочь мне в следующем вопросе: У меня есть страница с большим количеством элементов li , как показано ниже:

<ul class="feed-tips" id="Grid" data-sport="" data-country="" data-league="">
<li class="feed-item vevent tip-list-row" data-sort-bookmaker="12" data-sort-datetime="1525849200" data-sort-match="1" data-sort-odds="1.80" data-sort-rating="3" data-sort-status="1" data-sort-yield="-2.106" data-tip-id="6900510">
<li class="feed-item vevent tip-list-row" data-sort-bookmaker="22" data-sort-datetime="1525852800" data-sort-match="2" data-sort-odds="2.59" data-sort-rating="2" data-sort-status="1" data-sort-yield="-3.082" data-tip-id="6900483">
<li class="feed-item vevent tip-list-row" data-sort-bookmaker="22" data-sort-datetime="1525852800" data-sort-match="3" data-sort-odds="2.21" data-sort-rating="2" data-sort-status="1" data-sort-yield="-4.118" data-tip-id="6899865">

Внутри этого списка li каждый элемент имеет следующий класс:

<span class="original-language-image flag-icon flag-icon-gb"</span>

Все li элементы имеют этот span класс, и вместо него показывается только разница -gb , это другой код страны.

Я должен найти первые n элементов с одинаковым кодом gb (а также эти элементы должны быть один за другим) и сравнить их, если они совпадают с первым элементом. Отдыхать с другим кодом мне не нужно.

Попробовал следующий код, но сделал что-то не так (или допустил ошибку, используя равно в , если оператор):

List<WebElement> tipsGB = driver.findElements(By.xpath("//ul[@class='feed-tips']/li/div[@class='author medium-3 small-12 column padding-reset tip-list-row__author']\n"
            + "//div[@class='original-tip-language-container']/span[contains(@class,'flag-icon-gb')]"));
    WebElement firstTip = tipsGB.get(0);
    for (int p = 1; p < tipsGB.size(); p++) {
        System.out.println(tipsGB.get(p));
        WebElement nextTip = tipsGB.get(p);
        if (nextTip.equals(firstTip)) {
            WebElement tipLink = nextTip.findElement(By.xpath("../../../..\n"
                    + "/div[@class='tip medium-9 small-12 column padding-reset dtstart tip-list-row__tip']\n"
                    + "/div[@class='tip-match medium-12 column']/div[@class='tip-teams']/a"));
            System.out.println("Link to a tip with same language is: " + tipLink.getAttribute("href"));
        } else {
            System.out.println("No more tips in same language on top of page");
            continue;
        }
    }

Заранее спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Попробуйте следующий сценарий:

1 . Выберите все элементы, класс которых содержит термин 'flag-icon-gb' .(Вы можете ограничить поиск одним видом элемента, заменив * выше. Например, для поиска всех li, вы должны поставить //li[...]

2 .Выполните итерацию по своему списку, чтобы манипулировать первыми n элементами, которые вы хотите.

3 . Делайте то, что вы хотите для каждого элемента в цикле (сравните, получите детей, нажмитеи т. д., ...)

//Get all flags containing GB
List<WebElement> tipsGB = driver.findElements((By.xpath("//*[contains(@class,\'flag-icon-gb\')]"))

//Iterate over the list and do your stuff

for(int i=0; i<numberofElementsYouWant<;i++){

  Webelement currentElement = tipsGB.get(i);
  //manipulate your elements here
  currentElement.Dostuff();

}

Редактировать: похоже, что ваша проблема связана со сравнением. Вы пытаетесь сравнить объекты (WebElements), а те - нетНе равны. Только их тексты. Попробуйте вместо этого:

String firstTip = tipsGB.get(0).getAttribute("data-tip-id");

Сделайте то же самое внутри цикла, а затем сравните

String nextTip = tipsGB.get(p).getAttribute("data-tip-id");
if (nextTip.equals(firstTip)) {
....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...