Selenium ve Python kullanarak ember.js etkin düğmesine nasıl tıklanır
Bunu tıklanabilir hale getirmeye çalışıyorum ve neyi yanlış yaptığımı anlayamıyorum. Ayrıca göründüğünde tıklanması için webdriverwait'i teşvik etmeye çalışıyorum.
Şimdiye kadarki kodum bu:
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()
Bu, tıklanabilir hale getirmeye çalıştığım düğmenin kaynak kodudur:
<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>
Yanıtlar
İstenen öğe bir Ember.js öğesidir ve AUT'ye (Test Edilen Uygulama) her eriştiğinizde, idözniteliğinin değeri <button>dinamik olarak değişmeye devam edecektir . Dolayısıyla üzere elemana sen ikna etmek zorunda WebDriverWait için ve aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :click()element_to_be_clickable()
Kullanarak
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()Kullanarak
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()Not : Aşağıdaki içe aktarmaları eklemeniz gerekir:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Referanslar
Birkaç ilgili ayrıntılı tartışmayı şurada bulabilirsiniz:
- Selenyum - Köze göre element bulma
- Köz açılır selenyum xpath
Bu yardımcı olabilir ancak kimliği bulmak için kullandığımda webdriver'ın bir düğmeyi tıklamamayla ilgili sorunlar yaşadım. Bulduğum çalışma, id yerine xpath'i kullanmak. Bunun gibi, denemeye değer.
driver.find_element_by_xpath("""//*[@id="submit-button"]""").click()