Comment cliquer sur le bouton activé pour ember.js en utilisant Selenium et Python
J'ai essayé de rendre cela cliquable et je ne peux tout simplement pas comprendre ce que je fais de mal. J'essaye également d'induire webdriverwait, de sorte qu'il soit cliqué quand il apparaît.
C'est mon code pour l'instant:
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()
voici le code source du bouton que j'essaie de rendre cliquable:
<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>
Réponses
L'élément souhaité est un élément Ember.js et la valeur de l' id
attribut de <button>
continuera à changer dynamiquement, chaque fois que vous accédez à l' AUT (Application Under Test) . Par conséquent, click()
sur l'élément, vous devez induire WebDriverWait pour le element_to_be_clickable()
et vous pouvez utiliser l'une des stratégies de localisation suivantes :
Utilisation
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()
Utilisation
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()
Remarque : vous devez ajouter les importations suivantes:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Références
Vous pouvez trouver quelques discussions détaillées pertinentes dans:
- Sélénium - élément de recherche basé sur la braise
- Ember dropdown sélénium xpath
Cela peut aider, mais j'ai eu des problèmes avec le pilote Web qui ne clique pas sur un bouton lorsque j'utilise l'identifiant pour le trouver. Le travail autour que j'ai trouvé utilise le xpath au lieu de l'id. Comme ça, ça vaut le coup d'essayer.
driver.find_element_by_xpath("""//*[@id="submit-button"]""").click()