У меня странная проблема с Selenium, и я искал небольшую помощь. Я использую ожидаемые условия для проверки наличия элемента.
Проблема в том, что иногда это работает хорошо, но иногда выдает следующую ошибку:
File "selenium_func_call.py", line 327, in is_element_clickable
WebDriverWait(self.driver, 10).until(element)
File "python3.5/site-packages/selenium/webdriver/support/wait.py", line 71, in until
value = method(self._driver)
File "python3.5/site-packages/selenium/webdriver/support/expected_conditions.py", line 318, in __call__
element = visibility_of_element_located(self.locator)(driver)
File "python3.5/site-packages/selenium/webdriver/support/expected_conditions.py", line 139, in __call__
return _element_if_visible(_find_element(driver, self.locator))
File "python3.5/site-packages/selenium/webdriver/support/expected_conditions.py", line 440, in _find_element
return driver.find_element(*by)
TypeError: find_element() takes from 1 to 2 positional arguments but 3 were given
Мой вызов element_to_be_clickable () правильный. Я передаю кортеж.
Я полагал, что это была длина моего xpath или что-то, но это ни к чему не привело.
Я добавил несколько трассировок к Ожидаемому_условию, чтобы проверить, правильно ли я передаю аргументы.
вызов ожидаемых условий
element = EC.element_to_be_clickable((By.XPATH, element_xpath))
WebDriverWait(self.driver, 10).until(element)
Вывод из ожидаемого_условия.py
Это работает:
внутри _find_element
by = ('xpath', "// span [содержит (текст (), 'УСЛУГИ')] /../../ ..")
Это не так:
внутри _find_element
by = ('xpath', "// div [text () = 'STORAGE'] /../ div [2] / div [содержит (@class, 'ls-add-icon')]")
внутри _find_element
by = ('xpath', "// input [@name = 'id' and @value = 'Mint_Choco_Chip'] /../../../../../ div / div / div [text () = 'STORAGE'] /../ div [2] / div [содержит (@class, 'ls-add-icon')] ")
Любой совет о том, что я делаю неправильно, был бы прекрасен