klicken Sie auf javascript button mit der selenium-Python

Ich bin neu in Selenium-Python und JavaScript. Ich bin versucht, zu automatisieren, die Webseite, die Navigation mithilfe von Selenium-python. Ich möchte auf eine Java-Skript-Schaltfläche. Unten ist der html-tag.

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

Wie Sie klicken Sie auf ‚Neu …‘ – Schaltfläche aus Selenium-Python. Ich habe bereits versucht, unter die Dinge, aber immer Fehler.

driver.find_element_by_id('btnNew')

und

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

snippet von HTML wie gewünscht

<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>
  • Welche Fehler sind Sie immer?
  • selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"btnNew"}
  • gibt es irgendwelche iframe-Elemente auf einer Seite? Überprüfen Sie, ob diese Schaltfläche nicht innerhalb eines iframe.
  • auch für debugging-Zwecke nur, indem ein time.sleep(5) vor Auffinden der Schaltfläche einen Unterschied machen?
  • können Sie uns einige 4-5 Zeilen der html-Seite oberhalb der aktuellen Zeile
  • Ich Hinzugefügt.
  • was ist, wenn der button in das iframe ? Wie handhaben Sie es, wenn es ja.. @alecxe
  • wenn die Schaltfläche im iframe dann müssen Sie switch_to.frame(‚id des Frames oder verwenden Sie 0, wenn Ihr nur den Rahmen auf der aktuellen Seite‘)
  • können Sie versuchen, diese xpath = „.//div[contains(text(),’Neu…‘)]“
  • Noch werfen Fehler xpath = ".//div[contains(text(),'New...')]" button = driver.find_element_by_xpath(xpath) button.click() Fehler: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//div[contains(text(),'New...')]"}
  • können Sie uns die url der Webseite, wenn Ihr eine öffentliche Website
  • Leider ist es nicht eine öffentliche Website.
  • möglicherweise gibt es einige Synchronisations-Problem auf der Seite, versuchen, mit einigen warten oder Zeit.schlafen, wenn Ihr auch nicht funktioniert, dann könnte es sein, das Thema iframe oder Aktuelles Fenster Griff

InformationsquelleAutor | 2017-01-13



3 Replies
  1. 4

    Ich vermute, dass dies ist ein frames-problem.

    Selbst wenn Sie haben eine vollkommen korrekte XPATH, Selen nicht sehen, das element, es sei denn, Sie sind bereits in den Rahmen, der das element enthält,.

    Schnell sehen, wie viele Bilder auf der Seite sind Sie auf:

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

    Wenn Sie dann da sind, sagen wir, drei frames, die man tun könnte:

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

    oder

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

    oder

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

    Können Sie die folgenden Möglichkeiten zu suchen, Ihr element

    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

    Entnehmen Sie bitte der Dokumentation zu http://selenium-python.readthedocs.io/locating-elements.html

    Einige Beispiele, die gleichen sind wie unter

    1. Durch CSS-Selektor

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

    2. Mit Namen

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

    3. Durch ClassName

    driver.find_element_by_class_name('s_image').click()
    • Ich habe Alles versucht. Aber nichts funktionierte. Immer folgende Fehlermeldung. selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"btnNew"}
    • Verwenden Sie dies, wenn Sie wissen das id-Attribut eines Elements. Mit dieser Strategie, das erste element mit dem id-Attribut-Wert-matching wird die Position zurückgegeben werden. Wenn kein element hat ein entsprechendes id-Attribut, wird eine NoSuchElementException ausgelöst.
    • bitte Lesen Sie die documenatation es ist dort erwähnt
  3. 0

    Sollten Sie versuchen, fügen Sie einige Zeit warten, bevor Sie auf die Schaltfläche wie folgt:

    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();

    Mit obigen code werden Sie in der Lage sein, zu warten, bis zu 20 Sekunden für die target-Schaltfläche geklickt werden. Andernfalls erhalten Sie TimeOutException

    Wenn diese Lösung nicht funktioniert, überprüfen Sie, ob Ihre Schaltfläche befindet sich innerhalb <iframe> element. Wenn dem so ist, wechseln Sie zu dem gewünschten frame, bevor Sie auf die Schaltfläche:

    driver.switch_to_frame('iframe_id')
    • Ich werde versuchen,.. vielen Dank,,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.