Klicken Sie mit Selenium und Python auf die Schaltfläche ember.js enabled
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="{"aN":"shoppingCart","cN":"PlaceOrder","bhvr":80}" id="ember1053" class="btn theme-default btn-primary cli-purchase ember-view"><!----> Place order
</button></div>
Antworten
Das gewünschte Element ist ein Ember.js- Element, und der Wert des id
Attributs 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
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()