Как найти заголовок и список, где data-id является наибольшим номером - PullRequest
0 голосов
/ 13 марта 2020

Я хочу щелкнуть по элементу с самым высоким идентификатором данных. Я генерирую заголовок так:

char_set = string.ascii_uppercase
    tagTitle = "AI TAG " + ''.join(random.sample(char_set * 4, 4))
    driver.find_element_by_xpath("//*[@id='FolderName']").send_keys(tagTitle)

В настоящее время я получаю все элементы класса пользовательского интерфейса:

driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/div[1]/div/div[2]/ul/li")

enter image description here

<ul class="investorGroup ul-groups">
   <li data-id="-1" class="">
      <a href="javascript:void(0)" onclick="$.InvestorContact.Group.LoadGroupInvestorsOnGroupClick(-1,null, 0)">Master</a>
   </li>
   <li title="AI TAG AOAI" data-id="371">
      <a href="javascript:void(0)" onclick="$.InvestorContact.Group.LoadGroupInvestorsOnGroupClick(371)">2451b 24 (<span class="contactCatCount">0</span>)</a>
      <a href="javascript:$.InvestorContact.Group.OpenAddGroupModal(371)" class="edit"><i class="fa fa-pencil" aria-hidden="true"></i></a>
   </li>
   <li title="AI TAG CANG" data-id="376" >
      <a href="javascript:void(0)" onclick="$.InvestorContact.Group.LoadGroupInvestorsOnGroupClick(376)">452352 (<span class="contactCatCount">0</span>)</a>
      <a href="javascript:$.InvestorContact.Group.OpenAddGroupModal(376)" class="edit"><i class="fa fa-pencil" aria-hidden="true"></i></a>
   </li>
</ul>

теперь попробовал и показывает элемент:

$ x ('/ html / body / div 2 / div 2 / div 1 / div 1 / div / div 2 / ul / li [содержит (@title, "AI TAG") FOVE)) ')

enter image description here, но не щелкает и выдает ошибку через python:

TagElement = driver.find_element_by_xpath ( '/ html / тело / дела 2 / дела 2 / дела 1 / дела 1 / дела / дела 2 / ul / li [содержит (@title, "AI TAG FOVE")] ') TagElement.click ()

извините, если я пропущу что-то, только учащимся здесь.

selenium.common.exceptions.ElementClickInterceptedException: Сообщение: перехвачен щелчок элемента: Элемент ... не активируется в точке (122, 388). Другой элемент получит щелчок: ... (Информация о сеансе: chrome = 80.0.3987.132)

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Сначала получите все теги <li> в списке, представленном под определенным <ul>. Выполните итерацию по l oop, получите сравнение и сохраните элемент data-id с самым высоким значением атрибута. Наконец нажмите на элемент с самым высоким значением.

Используйте код ниже:

list_of_li = driver.find_elements_by_css_selector('.investorGroup.ul-groups li')

container = 0
number = None
for element in list_of_li:
    number = element.get_attribute('data-id')

    if container < int(number):
        container = int(number)
        max_element = element

print(container)

max_element.click()
1 голос
/ 13 марта 2020

Сначала вы можете получить все элементы в списке, а затем вы можете щелкнуть по последнему элементу, потому что он будет иметь наибольшее значение data-id, и если вы хотите получить заголовок, который нажимаете, вы можете получить его с помощью используя метод get_attribute().

Вы можете сделать это следующим образом:

# Fetching the elements using xpath
title_list = driver.find_elements_by_xpath("//ul[@class='investorGroup ul-groups']//li[contains(@title,'AI TAG')]")  

# Getting the title of the last element
title_list[-1].get_attribute("title")   

# Clicking on the last element
title_list[-1].click()

Отредактировано ANS для выбора текста из переменной:

value = "AI TAG"

Теперь получите список, используя:

title_list = driver.find_elements_by_xpath("//ul[@class='investorGroup ul-groups']//li[contains(@title,"+value+")]")  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...