Reputation: 1122
I have the following HTML span:
<button class="coreSpriteHeartOpen oF4XW dCJp8">
<span class="glyphsSpriteHeart__filled__24__red_5 u-__7" aria-label="Unlike"></span>
</button>
I also have a webElement
representing the button containing this span that I have found using xpath
. How can I retrieve the aria-label
value (Unlike) from the element?
I tried to do:
btn = drive.find_element(By.xpath, "xpath")
btn.get_attribute("aria-label")
but it returns nothing. How to retrieve the text value of an element with 'aria-label' attribute from the element object?
Upvotes: 8
Views: 25472
Reputation: 137
If xpath seems complicated, you can retrieve it with the class name and use the get_attribute method to access it.
value = driver.find_element(By.CLASS_NAME, 'glyphsSpriteHeart__filled__24__red_5 u-__7')
output = value.get_attribute("aria-label")
Upvotes: 0
Reputation: 1737
Following worked for me in Java,
WebElement btnelement= driver.findElement(
By.xpath("//span[@aria-label='Unlike']"));
System.out.println("Attribute value is " + btnelement.getAttribute("value"));
Upvotes: 1
Reputation: 1
# Like method
lov = el.find_element_by_class_name('glyphsSpriteHeart__outline__24__grey_9').click()
# Unlike method
lov = el.find_element_by_class_name('glyphsSpriteHeart__filled__24__red_5').click()
I used these methods instead and it worked!
Upvotes: 0
Reputation: 12255
aria-label
is attribute of span element, not button.
You can get it like this:
btn = drive.find_element(By.xpath, "xpath")
aria_label = btn.find_element_by_css_selector('span').get_attribute("aria-label")
Or if your goal is to find button with span contains attribute aria-label="Unlike"
:
btn = drive.find_element(By.XPATH, '//button[./span[@aria-label="Unlike"]]')
#you can add class to xpath also if you need
btn = drive.find_element(By.XPATH, '//button[./span[@aria-label="Unlike"] and contains(@class,"coreSpriteHeartOpen)]')
Upvotes: 10
Reputation: 193298
As per your question and the HTML you have shared it seems that the element is a React element, so to retrieve the attribute aria-label you have to induve WebDriverWait for the desired element to be visible and you can use the following solution:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "element_xpath_you_found"))).get_attribute("aria-label"))
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Upvotes: 0