2016-07-22 3 views
1

Вот HTML код элемента:Селен не может выбрать элемент по идентификатору

<input maxlength="64" name="pskSecret" class="text" id="pskSecret" value="" size="32" type="text"> 

А вот мой питон код, который пытается выбрать его:

self.driver.find_element_by_id("pskSecret").clear() 
self.driver.find_element_by_id("pskSecret").send_keys(data) # data is variable 

Однако я получил исключение , заявив, что селен не может найти элемент. Любые идеи, которые могут вызывать проблему

Редактировать: Также элемент находится внутри iframe, однако я обращаюсь к другим элементам в нем, которые работают правильно.

ответ

0

Может быть, когда вы собираетесь найти элемент, это не может быть загружено на DOM из-за проблем с синхронизацией. Вы должны попробовать использовать WebDriverWait подождать, пока элемент не виден, как показано ниже: -

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



wait = WebDriverWait(self.driver, 10) 

input = wait.until(EC.visibility_of_element_located((By.ID, "pskSecret"))) 
input.clear() 
input.send_keys(data) 

Примечание: - если этот элемент находится внутри любого кадра вам нужно переключить этот кадр, прежде чем найти элемент, используя self.driver.switch_to_frame("your frame id or name")

+0

Да, Я переключаю рамки. Однако по какой-то причине я получаю «ссылку перед установкой» для ввода. –

+1

@DeyanGeorgiev Это не происходит по коду селена. Я думаю, что это произошло из-за переменной 'data'. Вы неправильно присваиваете значение глобальной переменной' data' .. Пожалуйста, ознакомьтесь с этой ссылкой ..http: //stackoverflow.com/questions/855493/referenced-before- присваивание..хорошо это помогает .. –

+0

Я исправил ошибку, однако теперь я получил «By» не имеет атрибута «id» –

Смежные вопросы