Невозможно найти элемент: при нажатии кнопки через Selenium и Python - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу нажать на кнопку (событие), используя Selenium на Python, и код кнопки:

   <input id="workbenchLst:j_id_id509" name="workbenchLst:j_id_id509" onclick="A4J.AJAX.Submit('workbenchLst',event,{'similarityGroupingId':'workbenchLst:j_id_id509','parameters':{'ajaxSingle':'workbenchLst:j_id_id509','workbenchLst:j_id_id509':'workbenchLst:j_id_id509'} ,'containerId':'j_id_id1'} );return false;" value="Add" type="button" autocomplete="off">

Мой код:

driver.find_element_by_id("workbenchLst:j_id_id509").click()#add

, и он не работает, ошибка:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="workbenchLst:j_id_id509"]

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

попробуйте это:

element = driver.find_element_by_id('workbenchLst:j_id_id509')
element.click()

или:

element = driver.find_element(by=By.ID, value="workbenchLst:j_id_id509")
0 голосов
/ 04 февраля 2019

Сначала проверьте наличие фрейма / фрейма на вашей странице. Если фрейм / фрейм есть, вам нужно сначала переключить фрейм, как показано ниже:

driver.switch_to_frame(driver.find_element_by_id("iframeid"));

Вы можете попробовать щелкнуть элемент, используя ниже.XPath:

element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst') and @value='Add']");
element.click();

Или вы можете попробовать использовать JavaScript Executor, как показано ниже:

element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst') and @value='Add']");
driver.execute_script("arguments[0].click();", element);

Все еще не работает, затем попытайтесь дать некоторую задержку, импортируйте сон из времени, как показано ниже:

from time import sleep
driver.switch_to_frame(driver.find_element_by_id("iframeid"));
sleep(5);
element = driver.find_element_by_xpath("(//input[contains(@id, 'workbenchLst') and @value='Add'])[2]");
element.click();

Я надеюсь, что это работает ...

0 голосов
/ 04 февраля 2019

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

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id^='workbenchLst:'][name^='workbenchLst:'][value='Add']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[starts-with(@id,'workbenchLst:') and starts-with(@name,'workbenchLst:')][@value='Add']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

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