2017-01-13 3 views
1

Я новичок в Selenium Python и JavaScript. Я пытаюсь автоматизировать навигацию веб-страниц с использованием Selenium python. Я хочу нажать одну кнопку скрипта Java. Ниже находится тег html.Нажмите кнопку javascript, используя selenium Python

<button type="button" class="hpButton" onclick="loadAddPage()" id="btnNew" tabindex="100" style="width: 83px;">New...</button> 

Как нажимать кнопку «Создать ..» от Selenium Python. Я уже пробовал что-то ниже, но получаю ошибку.

driver.find_element_by_id('btnNew') 

и

NEXT_BUTTON_XPATH = '//input[@type="button" and @id="btnNew"]' 
button = driver.find_element_by_xpath(NEXT_BUTTON_XPATH) 
button.click() 

фрагмент HTML в соответствии с просьбой

<script type='text/javascript' language='JavaScript'> 
var FORM_URL_ID_MY_DISCOVERY_LIST = '/mxportal/settings/AutoDiscoveryList.jsp';</script> 
<script type='text/javascript' language='JavaScript'> 
window.SELECTABLE_ID_MY_DISCOVERY_LIST = true;window.PRESELECTED_ID_MY_DISCOVERY_LIST = true;window.PRESELECTION_DEFAULT_ID_MY_DISCOVERY_LIST = true;</script> 
<div id='ID_MY_DISCOVERY_LIST_headerDiv' class='headerDivOuter'><div class='headerDivInner'><div onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=91787367&sortUp=true")' class='visualColumnHeader sortable'><div class='pad0x5'></div></div><div onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=0&sortUp=false")' class='visualColumnHeader sortedAscending'><div class='pad0x5'>Name</div></div><div onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=1&sortUp=true")' class='visualColumnHeader sortable'><div class='pad0x5'>Last Run</div></div><div onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=2&sortUp=true")' class='visualColumnHeader sortable'><div class='pad0x5'>Schedule</div></div><div onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=3&sortUp=true")' class='visualColumnHeader sortable'><div class='pad0x5'>Comments</div></div></div></div><div id='ID_MY_DISCOVERY_LIST_scrollingTableDiv' style='clear:both;overflow:visible'><table id='ID_MY_DISCOVERY_LIST' cellspacing='0' class='scrollingTable' cellpadding='0'><thead><tr class='readerCaptionRow'><th onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=91787367&sortUp=true")' class='checkboxCell sortable'></th><th onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=0&sortUp=false")' class='sortedAscending' scope='col'>Name</th><th onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=1&sortUp=true")' class='sortable' scope='col'>Last Run</th><th onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=2&sortUp=true")' class='sortable' scope='col'>Schedule</th><th onClick='MxFragmentLoad("/mxportal/settings/AutoDiscoveryList.jsp?MxTableSort=true&table=ID_MY_DISCOVERY_LIST&sortCol=3&sortUp=true")' class='sortable' scope='col'>Comments</th></tr></thead><tbody><tr id='ID_MY_DISCOVERY_LIST_dummyRow' class='dummyRow'><td><div></div></td><td class='sorted'><div></div></td><td><div></div></td><td><div></div></td><td><div></div></td></tr><tr class='altRowColor rowHighlight'><td scope='row' class='checkboxCell'><input rowselector='yes' checked name='ID_MY_DISCOVERY_LIST_selector' type='RADIO'></td><td class='sorted'>ESX VC</td><td>1/13/17 11:00 AM</td><td>Periodic - Next Run: 1/14/17 11:00 AM</td><td></td></tr><tr><td scope='row' class='checkboxCell'><input name='ID_MY_DISCOVERY_LIST_selector' type='RADIO' rowselector='yes'></td><td class='sorted'>Hyper-vHost</td><td>1/13/17 11:00 AM</td><td>Periodic - Next Run: 1/14/17 11:00 AM</td><td></td></tr><tr class='altRowColor'><td scope='row' class='checkboxCell'><input name='ID_MY_DISCOVERY_LIST_selector' type='RADIO' rowselector='yes'></td><td class='sorted'>OA</td><td>1/13/17 11:00 AM</td><td>Periodic - Next Run: 1/14/17 11:00 AM</td><td></td></tr><tr><td scope='row' class='checkboxCell'><input name='ID_MY_DISCOVERY_LIST_selector' type='RADIO' rowselector='yes'></td><td class='sorted'>OA 42.35</td><td>1/13/17 11:00 AM</td><td>Periodic - Next Run: 1/14/17 11:00 AM</td><td></td></tr><tr class='altRowColor'><td scope='row' class='checkboxCell'><input name='ID_MY_DISCOVERY_LIST_selector' type='RADIO' rowselector='yes'></td><td class='sorted'>System Automatic Discovery</td><td>Never</td><td><b>Task is Disabled</b> - Periodic</td><td></td></tr><tr style='display:none' class='noDataRow'><td colspan='5'>No discovery tasks defined.</td></tr></tbody></table></div> 
     <div style="margin-top:15px"> 
      <div class='buttonSet'> 
<div class='bWrapperUp'><div><div><button type='button' class='hpButton' onclick='runNowStop()' id='btnRunNowStop' tabindex='105'>Run Now</button></div></div></div> 
<div class='bWrapperUp'><div><div><button type='button' class='hpButton' onclick='viewTaskResults()' id='btnViewTaskResults' tabindex='104'>View Task Results...</button></div></div></div> 
<div class='bWrapperUp'><div><div><button type='button' class='hpButton' onclick='confirmDeleteDiscoveryTask()' id='btnDelete' tabindex='103'>Delete...</button></div></div></div> 
<div class='bWrapperUp'><div><div><button type='button' class='hpButton' onclick='enableDisableDiscoveryTask()' id='btnEnableDisable' tabindex='102'>Disable</button></div></div></div> 
<div class='bWrapperUp'><div><div><button type='button' class='hpButton' onclick='loadEditPage()' id='btnEdit' tabindex='101'>Edit...</button></div></div></div> 
<div class='bWrapperUp'><div><div><button type='button' class='hpButton' onclick='loadAddPage()' id='btnNew' tabindex='100'>New...</button></div></div></div> 
</div> 
<div class='clearFloats'></div> 
+0

Какая ошибка вы получаете? – Suzanne

+0

'selenium.common.exceptions.NoSuchElementException: Message: no такой элемент: не удалось найти элемент: {" method ":" id "," selector ":" btnNew "}' –

+1

@ user2731629 есть ли какие-либо элементы iframe на странице ? Проверьте, не находится ли эта кнопка внутри iframe. – alecxe

ответ

0

Я предполагаю, что это проблема с кадрами.

Даже если у вас есть совершенно правильный XPATH, Selenium не увидит этот элемент, если вы уже не находитесь в кадре, который содержит элемент.

Чтобы быстро увидеть, сколько кадров находятся на странице вы находитесь на:

a = driver.find_elements_by_css_selector("frame") 
print(len(a)) 

Если вы затем выяснить, есть, скажем, три кадра, вы можете сделать:

driver.switch_to_frame(a[0]) 
button.click() 

или

driver.switch_to_frame(a[1]) 
button.click() 

или

driver.switch_to_frame(a[2]) 
button.click() 
0

Вы можете использовать следующие способы, чтобы найти ваш элемент

find_element_by_id 
find_element_by_name 
find_element_by_xpath 
find_element_by_link_text 
find_element_by_partial_link_text 
find_element_by_tag_name 
find_element_by_class_name 
find_element_by_css_selector 

Пожалуйста, обратитесь к документации по http://selenium-python.readthedocs.io/locating-elements.html

Некоторые примеры такой же как под

1. В CSS Selector

driver.find_element_by_css_selector('.button.c_button.s_button').click() 

2. По имени

driver.find_element_by_name('s_image').click() 

3. По ClassName

driver.find_element_by_class_name('s_image').click() 
+0

Я пробовал все. Но ничего не получилось. Ошибка ниже. 'selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: Не удалось найти элемент: {" method ":" id "," selector ":" btnNew "}' –

+0

Используйте это, когда знаете атрибут id элемент. С помощью этой стратегии будет возвращен первый элемент с значением атрибута id, соответствующим местоположению. Если ни один элемент не имеет соответствующего атрибута id, будет вызвано исключение NoSuchElementException. – AurA

+0

, пожалуйста, прочитайте документацию, упомянутую там – AurA

0

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

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

button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "btnNew"))); 
button.click(); 

С выше кода вы можете подождать до 20 секунд для целевой кнопки, чтобы стать интерактивными. В противном случае вы получите TimeOutException

Если это решение не будет работать, проверьте, находится ли ваша кнопка внутри элемента <iframe>. Если это так, переключитесь на этот кадр, прежде чем нажимать кнопку:

driver.switch_to_frame('iframe_id') 
+0

Я попробую .. Спасибо, –

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