Selenium ve Python kullanarak ember.js etkin düğmesine nasıl tıklanır

Nov 21 2020

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="{&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>

Yanıtlar

DebanjanB Nov 22 2020 at 20:59

İ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
ImCrimson Nov 22 2020 at 05:17

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