Cách nhấp vào nút bật ember.js bằng Selenium và Python
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="{"aN":"shoppingCart","cN":"PlaceOrder","bhvr":80}" id="ember1053" class="btn theme-default btn-primary cli-purchase ember-view"><!----> Place order
</button></div>
Trả lời
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
Đ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()