Volatil3
Volatil3

Reputation: 14988

Selenium Python: Unable to select combo value

I am accessing this page and I have to pick one of Combo value that shows existing resume. I am getting error:

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

Code I am trying is:

from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep
from bs4 import BeautifulSoup
driver = webdriver.Firefox()
driver.get('https://www.glassdoor.com/job-listing/developer-one-north-interactive-JV_IC1128808_KO0,9_KE10,31.htm?jl=1584069572')
select_box = driver.find_element_by_id('ExistingResume')
select_box.click();
select_box = Select(select_box)
sleep(5)
select_box.select_by_value(RESUME_TEXT_VALUE)

Updated The required element is right there

enter image description here

Update #2: Checked that element is not visible in static html. Guess via JS being loaded.

Update #3: OK I made following changes which prints tag name that is select:

select_box = driver.find_element_by_id('ExistingResume')
print(select_box.tag_name)

Now mission is to select the value from that combo

Upvotes: 1

Views: 191

Answers (3)

alecxe
alecxe

Reputation: 473983

First of all, you have to be logged in and have at least one existing uploaded resume.


You cannot directly control the select element with the resumes - it is invisible. Control the wrapping combo element that is visible.

Complete working code (including logging in):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Firefox()
driver.get('https://www.glassdoor.com/job-listing/developer-one-north-interactive-JV_IC1128808_KO0,9_KE10,31.htm?jl=1584069572')

# log in
driver.find_element_by_css_selector("div.actions span.signin").click()

driver.find_element_by_css_selector("form.signInForm input.signin-email").send_keys("login")
driver.find_element_by_css_selector("form.signInForm input.signin-password").send_keys("password")
driver.find_element_by_css_selector("form.signInForm button.loginDlgSignInBtn").click()

# wait for the combo to appear
resume_name = "myResume.pdf"

# open up combo
combo = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "ExistingResumeSelectBoxIt")))
combo.click()

# select resume
resume_item = combo.find_element_by_xpath("//li[@data-val = '%s']" % resume_name)
resume_item.click()

Upvotes: 0

Mesut GUNES
Mesut GUNES

Reputation: 7411

You can use Keys.ARROW_DOWN to get the option and Keys.RETURN to select. See below:

>>> from selenium.webdriver.common.keys import Keys
>>> driver.find_element_by_id("ExistingResumeSelectBoxIt").click()
>>> d = driver.find_element_by_id("ExistingResumeSelectBoxIt")
>>> d.send_keys(Keys.ARROW_DOWN)
>>> d.send_keys(Keys.RETURN)
>>> driver.find_element_by_id("ExistingResumeSelectBoxIt").text
u'mesut gunes resume eng.pdf'

You must be logged in and have a resume too.

Upvotes: 1

Zoli
Zoli

Reputation: 836

The error message is clean enough. The problems is that there is no element with id "ExistingResume" on the website.

If you open the console in your browser and type $("#ExistingResume"); jQuery cannot find that element on the website neither.

Make sure you didn't make a typo in the id or you have all the necessary permissions to access that element. (Maybe it's visible only for logged in users.)

Upvotes: 0

Related Questions