Cách nhấp vào nút bật ember.js bằng Selenium và Python

Nov 21 2020

Tôi đã cố gắng làm cho cái này có thể nhấp được và tôi không thể hiểu được mình đang làm gì sai. Tôi cũng đang cố gắng tạo ra webdriverwait để nó được nhấp khi nó xuất hiện.

Đây là mã của tôi cho đến nay:

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

đây là mã nguồn cho nút mà tôi đang cố tạo cho nút có thể nhấp được:

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

Trả lời

DebanjanB Nov 22 2020 at 20:59

Phần tử mong muốn là phần tử Ember.js và giá trị của idthuộc tính của <button>will tiếp tục thay đổi động, mỗi khi bạn truy cập AUT (Application Under Test) . Do đó, click()đối với yếu tố bạn phải tạo WebDriverWait cho element_to_be_clickable()và bạn có thể sử dụng một trong các Chiến lược định vị sau:

  • Sử dụng 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()
    
  • Sử dụng 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()
    
  • Lưu ý : Bạn phải thêm các lần nhập sau:

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

Người giới thiệu

Bạn có thể tìm thấy một số cuộc thảo luận chi tiết có liên quan trong:

  • Selenium - Tìm nguyên tố dựa trên than hồng
  • Ember thả xuống selen xpath
ImCrimson Nov 22 2020 at 05:17

Điều này có thể hữu ích nhưng tôi đã gặp sự cố với webdriver không nhấp vào nút khi tôi sử dụng id để tìm nó. Công việc xung quanh tôi đã tìm thấy là sử dụng xpath thay vì id. Như thế này, nó đáng để thử.

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