Передача переменной в xpath selenium, Python

Это код, который я использую, пытаясь передать переменную в xpath.

def findcase(year):     
    select = Select(driver.find_element_by_id('SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear'))
    select.select_by_value(str(year))

Получение следующего сообщения об ошибке:

Traceback (most recent call last):
  File "/Users/jackboland/Library/Mobile Documents/com~apple~CloudDocs/Python/Selenium/8thDistBriefScraping_FUNCTIONVersion.py", line 27, in <module>
    findcase('2013','100604')
  File "/Users/jackboland/Library/Mobile Documents/com~apple~CloudDocs/Python/Selenium/8thDistBriefScraping_FUNCTIONVersion.py", line 18, in findcase
    select = Select(driver.find_element_by_id('SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear'))
  File "/anaconda2/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 353, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/anaconda2/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 957, in find_element
    'value': value})['value']
  File "/anaconda2/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "/anaconda2/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear"}
  (Session info: chrome=66.0.3359.181)
  (Driver info: chromedriver=2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011),platform=Mac OS X 10.13.4 x86_64)

Я пробовал строку в кавычках (двойных и одинарных). Я попытался вставить переменную с помощью str (переменная). Ничего не происходит. Невозможно заставить функцию разрешить передачу переменной.

Это соответствующий HTML. Но обратите внимание, что когда я передаю фактическое число, год, приведенный выше код работает отлично. Он терпит неудачу только при попытке передать переменную для этого числа.

//*[@id = "SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear"]

В сообщении об ошибке говорится, что не удалось найти элемент с идентификатором SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear, пожалуйста, вручную проверьте локатор #SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear в Chrome DevTool и поделитесь соответствующим HTML в своем вопросе.

yong 22.05.2018 05:08

Можете ли вы поделиться HTML

iamsankalp89 22.05.2018 06:41

Ваша проблема не имеет ничего общего с передачей переменной в XPath, потому что: 1) Вы не используете XPath, 2) Исключение возникает в строке, предшествующей select.select_by_value(str(year)). Убедитесь, что узел select не генерируется динамически, он не находится внутри iframe.

Andersson 22.05.2018 07:04

Это ниже, я думаю, соответствующий HTML. Одно замечание: я НЕ получаю никаких ошибок, если просто ввожу год в приведенный выше код вместо попыток переменной, которые я сделал. Итак, код селена отлично работает с фактическими значениями, просто терпит неудачу, как указано выше, при попытке передать имя переменной в код. [ссылка] #SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear [ссылка]

John Taylor 22.05.2018 13:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
754
1

Ответы 1

Я понял это. Код, который работает ниже:

year = 2014
yearstr = str(year)
casenum = 100604
casenumstr = str(casenum)
select = Select(driver.find_element_by_id('SheetContentPlaceHolder_coaCaseSearch_ddlCaseYear'))
select.select_by_value(yearstr)
#inserts the case number in that box below the year
driver.find_element_by_id('SheetContentPlaceHolder_coaCaseSearch_txtCaseNum').send_keys(casenumstr)

Другие вопросы по теме