Я автоматизирую веб-приложение в браузере IE (Internet Explorer).
Я получаю следующую ошибку, когда пытаюсь найти какой-либо элемент на странице после загрузки страницы.
selenium.common.exceptions.InvalidSelectorException: Message: Unable to locate an element with the xpath expression //div[@id='index_logo']/following-sibling::div/form because of the following error:
TypeError: Object doesn't support property or method 'evaluate';
Код
#xpaths
cpDvForm = "//div[@id='index_logo']/following-sibling::div/form"
cpDvUser = "//input[@id='username']"
cpDvPass = "//input[@id='password']"
cpDvLanRadio = "//input[@id='net_lan']"
cpDvLogin = "//a[@onclick='login()']"
#code
options= webdriver.IeOptions()
d = webdriver.Ie(options=options)
d.get(url)
#time.sleep(10)
#WebDriverWait(d,10).until(EC.element_to_be_clickable(d.find_element(By.XPATH,cpDvUser)))
form = d.find_element(By.XPATH,cpDvForm)
form.find_element(By.XPATH,cpDvUser).clear()
form.find_element(By.XPATH,cpDvUser).send_keys('user')
form.find_element(By.XPATH,cpDvPass).send_keys('pass')
form.find_element(By.XPATH,cpDvLanRadio).click()
form.find_element(By.XPATH,cpDvLogin).click()
Я попытался вызвать ожидание Webdriver и ожидание сна, чтобы гарантировать загрузку страницы. Я проверил Iframes и Shadow dom. нет ни того, ни другого.
Как уже упоминалось, ошибка возникает, когда мы пытаемся найти какой-либо элемент после загрузки страницы. Все предложения и решения приветствуются!
Дополнительное примечание/информация:
Дайте мне знать, если потребуется дополнительная информация, я добавлю ее соответствующим образом. Ваше здоровье !
Поможет ли вам этот вопрос: stackoverflow.com/questions/75485006/… ?
Привет @SiebeJongebloed. Я добавил приведенные выше xpath //input[@id='username'] для cpDvUser. Я ответил на предложенный вопрос, но мне это не помогло. Если вы чувствуете, что я что-то пропустил, добавьте, пожалуйста. Спасибо !
XPath действителен. Вам не нужно искать форму, а затем искать ее, если у элементов есть идентификаторы. Пробовали ли вы удалить шаг формы, а затем использовать более поздние локаторы? Они работают? Попробуйте что-нибудь простое для имени пользователя (By.ID, "username") вместо XPath. Мне интересно, не скопировали ли вы откуда-то этот локатор и не получили ли в строке неверный символ, который не виден. Попробуйте ввести локатор cpDvForm заново.
Привет @JeffC, первоначальный подход был только без формы, так как я получал ту же ошибку, я пробовал разные xPath, а затем увидел, что элементы заключены в форму, поэтому попытался получить к ней доступ из формы. Я попробую подход ID и сообщу вам, спасибо!
Привет @JeffC, спасибо за терпение! Я попробовал селектор поиска By.ID, и он сработал!! Я не уверен, почему XPath не работает. Я немного знаком с xpath и в основном использую его. Я дал простой xpath '//*[@id='username']', но он не работает с той же ошибкой. Я понятия не имею, почему. Есть идеи по этому поводу, и можете ли вы указать мне на какие-либо учебные ресурсы. Спасибо !
Не имею представления. Я протестировал XPath, который вы предоставили в инструментах разработчика Chrome, и ни на одном из них не обнаружил ошибок. Единственное, о чем я могу думать, это то, о чем я упоминал ранее... что в локатор был вставлен какой-то случайный скрытый символ, так что мы его не видим, но это вызывает ошибку.
Не беспокойтесь, еще раз спасибо @JeffC, я продолжу работу с идентификационными тегами для этого веб-приложения. Ваше здоровье !





Как подчеркнул @JeffC, для этого подойдет селектор идентификатора By.ID,'theId'.
Продолжаем выбор идентификатора.
Несмотря на то, что XPath правильный, по какой-то другой причине он выдает ошибку.
Пожалуйста, покажите нам, в чем ценность, например
cpDvUser