Getting the attribute text from the custom attribute

Question:

I have the custom attribute called upgrade-test="secondary-pull mktg-data-content in the following code snippet:

<section class="dvd-pull tech-pull-- secondary-pull--anonymous tech-pull--digital secondary-pull--dvd-ping tech-pull--minimise" upgrade-test="secondary-pull mktg-data-content" data-js="primary-pull" style="--primary-direct-d_user-bottom-pos:-290px;">

I am able to identify my element successfully by doing the following:

element = driver.find_element(By.XPATH, "//section[contains(@upgrade-test, 'mktg-data-content')]") 

This mktg-data-content gets changed every time a user goes to a different page for example it could be sales-data-content for the sales page etc.

What I am after is to find a way to retrieve this dynamic text of this custom attribute and pass it to my variable. Any help would really be appreciated. Thanks

Asked By: chauhany

||

Answers:

You need to fetch the attribute value using element.get_attribute("upgrade-test") and then need to do string manipulation.

elementval = driver.find_element(By.XPATH, "//section[contains(@upgrade-test, 'secondary-pull')]").get_attribute("upgrade-test")
print(elementval.split(" ")[-1])

Note:- splitted with space,which returns zero based list, index -1 means the last value of the list,
since you have two elements in the list you can use this as well
print(elementval.split(" ")[1])

Answered By: KunduK

You need to find a unique locator for that element.
Without seeing that page we can only guess, so I can guess tech-pull--digital and secondary-pull--dvd-ping class names are making a unique combination.
If so you can use the following code:

attribute_val = driver.find_element(By.CSS_SELECTOR, "section.tech-pull--digital.secondary-pull--dvd-ping").get_attribute("upgrade-test")
print(attribute_val.split(" ")[-1])

The first line here locates the element and retrieves the desired attribute value while the second line isolates the first part of the desired attribute value as explained by KunduK

Answered By: Prophet