Search code examples
python-3.xselenium-webdriverpdb

selenium python text shows in pdb but empty in print()


I'm getting text inside specific element using selenium. It sometimes prints texts and sometimes empty string. But it always shows texts in pdb.

I tried .text, .get_attribute('innerText'), .get_attribute('textContent') using get_elements_by_class_name, get_element_by_css_selector and xpath as well Same result. Always perfect in pdb but in print()

options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome('chromedriver', options=options)
driver.implicitly_wait(4)
driver.get('some url')

no = driver.find_element_by_css_selector('span.hashtag + span')
span = driver.find_elements_by_class_name('live-label-draw')[0].find_element_by_css_selector('span:last-child')
parent = driver.find_elements_by_class_name('live-label-draw')[0]

print(parent.text)
print('-------by class name', span.text, span.get_attribute('innerText'), span.get_attribute('textContent'))

print('-------by css', no.tag_name, no.get_attribute('textContent'), no.get_attribute('innerText'), no.text)

import pdb; pdb.set_trace()

--Insdie pdb--
no.text, no.get_attribute('innerText'), span.text, span.get_attribute('innrText') all prints 31907040069
Also parent.text prints #31907040069

<span class="live-label-draw">
  <span class="hashtag">#</span>
  <span>31907040069</span>  <--- trying to get '31907040069'
</span>

expected:
#31907040069
------by class name 31907040069 31907040069 31907040069
------by css 31907040069 31907040069 31907040069

actual results:
#
------by class
------by css


Solution

  • I just needed explicit waits using WebDriverWait().until until the element is visible.
    That was why it worked in pdb, because it stops and wait automatically.