2016-03-15 3 views
0

У меня проблема, когда .click() не работает с элементом. После щелчка мышью появляется небольшое окно со значениями на выбор. Однако я не могу заставить селен щелкнуть по этому элементу, поскольку он дает мне ошибку, даже если элемент найден. Используя Selenium IDE и записывая мои действия, он записывает действие click на один и тот же элемент, поэтому я не понимаю, что не работает. Я дошел до него и нажал на множество элементов.Элемент Selenium не нажимает

Вот фрагмент кода, который вызывает ошибку:

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 
from selenium.webdriver.support.ui import Select 
import time 

def FirefoxTest(): 
    fp = webdriver.FirefoxProfile('C:/Users/MYUSER/AppData/Roaming/Mozilla/Firefox/Profiles/ethy92lt.default') 
    driver = webdriver.Firefox(fp) 
    site = ("www.company_intranet.com") 
    driver.get(site) 
    try: 
     WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "C29_W35_V37_V46_btresporg_struct.partner_no-btn"))) 
    except: 
     print("C29_W35_V37_V46_btresporg_struct.partner_no-btn not found") 
    driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click() 

идентификатор элемента я пытаюсь нажать:

<a class="th-ip-h" id="C29_W35_V37_V46_btresporg_struct.partner_no-btn" href="javascript:void(0)" onclick="thtmlb_hideContextMenu(event); thtmlbCSVHManger.inputfieldF4IconClick('C29_W35_V37_V46_btresporg_struct.partner_no','C29_W35_V37_V46','ZSRQM_PROB_H','PROBLEMHEADEREF');htmlbSubmitLib('htmlb',this,'thtmlb:inputField:inputField:null','myFormId','C29_W35_V37_V46_btresporg_struct.partner_no','\x23AUTONAV\x23OP_FINDRESPORG\x23BTRESPORG\x230\x23PARTNER_NO',0);return false;" onfocus="thtmlbSaveKeyboardFocus('C29_W35_V37_V46_btresporg_struct.partner_no');thtmlb_hideContextMenu();" title="Open Input Help"><img class="th-ip-img" src="/SAP/BC/BSP/SAP/ZIR_STYLES/EHP3 default/images/helpF4.gif" alt="Open Input Help"></a> 

Я получаю ошибку:

Traceback (most recent call last): 
    File "C:/Users/MYUSER/PycharmProjects/untitled/selen_QT.py", line 229, in <module> 
    FirefoxTest() 
    File "C:/Users/MYUSER/PycharmProjects/untitled/selen_QT.py", line 98, in FirefoxTest 
    driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click() 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 75, in click 
    self._execute(Command.CLICK_ELEMENT) 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 454, in _execute 
    return self._parent.execute(command, params) 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute 
    self.error_handler.check_response(response) 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 102, in check_response 
    value = json.loads(value_json) 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

Edit: таймер сна прежде, чем решить проблему

time.sleep(5) driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click()

+0

Просто чтобы уточнить: элемент, который вы хотите нажать, находится в другом окне? – Maresh

+0

Он находится в том же окне (исходный код). Я не могу открыть другое окно, чтобы продолжить. – Trm

+0

Вы пытались проверить Firefox-отладчик, чтобы увидеть, есть ли там ошибка? – Maresh

ответ

0

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

try: 
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "C29_W35_V37_V46_btresporg_struct.partner_no-btn"))) 
    driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click() 
except TimeoutException: 
    print("C29_W35_V37_V46_btresporg_struct.partner_no-btn not found") 

Хотя я не думаю, что это корень проблемы.

+0

Спасибо за предложение. Я настрою свои блоки Try. Как вы упомянули, проблема заключается не в том, что я не могу найти элемент (я делаю и могу распечатать его идентификатор), но я получаю сообщение об ошибке при попытке щелкнуть по нему. – Trm

+1

Проблема, похоже, лежит в библиотеке. Я немного смотрю на известные ошибки селена и вижу подобный, я не уверен на 100%, что это одно и то же. Похоже, что драйвер пытается распаковать JSON-сообщение из Firefox API, но не делает этого, потому что он фактически пуст. Боюсь, что это из ваших рук. – Maresh

+0

Я поставил 5 секундный таймер перед тем, как сделать клик, и на нем появилось всплывающее окно. Я предполагаю, что, несмотря на поиск элемента, веб-сайту нужно некоторое время, чтобы полностью загрузить или что-то еще. Мне нужно сделать еще немного тестирования. – Trm

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