Klicken Sie mit Selenium und Python auf die Schaltfläche ember.js enabled

Nov 21 2020

Ich habe versucht, dies anklickbar zu machen und kann einfach nicht verstehen, was ich falsch mache. Ich versuche auch, Webdriverwait zu induzieren, so dass es angeklickt wird, wenn es angezeigt wird.

Dies ist mein bisheriger Code:

def order(k):
    driver = webdriver.Chrome(os.getcwd()+"\\webdriver\\chromedriver.exe") 
    driver.get("website.com/login-to-checkout")
    driver.find_element_by_id('i0116').send_keys(k["email"])
    driver.find_element_by_id('i0118').send_keys(k["password"])
    driver.find_element_by_id('idSIButton9').click()
    delay()
    #sign in button
    driver.find_element_by_id('idSIButton9').click()
    #Button below I cant get to be clicked
    with webdriver.Chrome() as driver:
        wait = WebDriverWait(driver, 7)
        wait.until(presence_of_element_located((By.CSS_SELECTOR, "#ember1053")))
        driver.find_element(By.id, "ember1053").click()

Dies ist der Quellcode für die Schaltfläche, die ich anklickbar machen möchte:

<div id="ember1037" class="btn-group m-b-lg m-t-lg order-call-to-action ember-view"><!---->        <!--biBehavior 80 means place order Place Order-->

<button aria-live="polite" type="button" tabindex="0" data-m="{&quot;aN&quot;:&quot;shoppingCart&quot;,&quot;cN&quot;:&quot;PlaceOrder&quot;,&quot;bhvr&quot;:80}" id="ember1053" class="btn theme-default btn-primary cli-purchase ember-view"><!---->            Place order

</button></div>

Antworten

DebanjanB Nov 22 2020 at 20:59

Das gewünschte Element ist ein Ember.js- Element, und der Wert des idAttributs von <button>ändert sich bei jedem Zugriff auf das AUT (Application Under Test) dynamisch . Daher müssen Sie für click()das Element WebDriverWait für das induzieren element_to_be_clickable()und können eine der folgenden Locator-Strategien verwenden :

  • Verwenden von CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.theme-default.btn-primary.cli-purchase.ember-view[id^='ember'][type='button'][aria-live='polite']"))).click()
    
  • Verwenden von XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn theme-default btn-primary cli-purchase ember-view' and starts-with(@id,'ember')][contains(., 'Place order') and @aria-live='polite']"))).click()
    
  • Hinweis : Sie müssen folgende Importe hinzufügen:

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

Verweise

Einige relevante ausführliche Diskussionen finden Sie in:

  • Selen - Suchelement auf Glutbasis
  • Glut Dropdown Selen xpath
ImCrimson Nov 22 2020 at 05:17

Dies kann helfen, aber ich hatte Probleme mit dem Webdriver, der nicht auf eine Schaltfläche geklickt hat, wenn ich die ID verwende, um sie zu finden. Die Arbeit, die ich gefunden habe, besteht darin, den xpath anstelle der ID zu verwenden. So ist es einen Versuch wert.

driver.find_element_by_xpath("""//*[@id="submit-button"]""").click()