Та же кнопка, другой текст.селен питон - PullRequest
1 голос
/ 09 марта 2019

У меня есть два типа кнопок, с одинаковыми классами, идентификаторами и т. Д., Но две вещи разные. Действие, которое они делают, и текст. У одного есть текст приглашения, у другого - сообщение. Я хочу сделать что-то, когда это «пригласить» и что-то еще, когда это «сообщение». Вы знаете, что я должен использовать? Если? Или я должен использовать webDriverWait?

Это HTML-код.

<button aria-label="Invite" class="button m5"> Invite </button>

или

<button aria-label="Message" class="button m5"> Message </button>

Я попробовал что-то подобное и не работает. У вас есть идея, почему?

buttons=driver.find_elements_by_class_name("button m5")
for but in (buttons):
fetch_text=but.text
if "Invite" in fetch_text:
###do somethin
else: ###do somethin

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Поскольку className одинаково для обоих элементов, вы можете сначала извлечь текст, используя className, а затем поместить условие if в текст и затем действовать соответствующим образом.

Например, в вашем случае это будет выглядеть так:

fetch_element_text = driver.find_element_by_class_name("button m5").text

if "Invite" in fetch_element_text:
     # Operate according to the Invite button 

elif "Message" in fetch_element_text:
     # Operate according to the Message button

Обновленный ответ :
В соответствии с вашим обновленным вопросом, пожалуйста, попробуйте следующий xpathдля извлечения элементов в цикле:

buttons=driver.find_elements_by_xpath("//button[@class='button m5']")
print(len(buttons))
for button in buttons:
    fetch_element_text = button.text

И теперь вы можете поставить то же условие if else, как упомянуто выше.

0 голосов
/ 09 марта 2019

Вы не можете использовать find_elements_by_class_name для поиска нескольких элементов. Пожалуйста, используйте xpath или CssSelector

buttons=driver.find_elements_by_xpath("//button[@class='button m5']")
print(len(buttons))
for button in buttons:
    fetch_text = button.text
    if "Invite" in fetch_text:
      print("Invite Button")
    else:
      print("Massage Button")

ИЛИ

buttons = driver.find_elements_by_css_selector("button.m5")
print(len(buttons))
for button in buttons:
   fetch_text = button.text
   if "Invite" in fetch_text:
      print("Invite Button")
   else:
      print("Massage Button")
0 голосов
/ 09 марта 2019

Вы можете найти каждую кнопку через xpath :

invite = driver.find_element_by_xpath("//button[@aria-label='Invite']")
print(invite.text)   # Invite
message = driver.find_element_by_xpath("//button[@aria-label='Message']")
print(message.text)  # Message
...