如何使用Selenium和Python单击ember.js启用按钮

bprjcwpo  于 2022-11-23  发布在  Python
关注(0)|答案(2)|浏览(135)

我一直试图使这个可点击,我只是不能理解我做错了什么。我也试图诱导webdriverwait,使它出现时被点击。
这是我目前的代码:

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

下面是我试图使按钮成为可点击的按钮的源代码:

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

k10s72fa1#

所需的元素是Ember.js元素,并且<button>id属性的值将在每次访问 AUT(Application Under Test) 时动态更改。因此,对于元素上的click(),必须引发WebDriverWait以等待element_to_be_clickable(),并且可以使用以下定位器策略之一:

  • 使用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()
  • 使用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()

*注意:必须添加以下导入:

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

参考

您可以在以下位置找到相关的详细讨论:

  • Selenium -基于ember寻找元素
  • Ember下拉式 selenium xpath
vybvopom

vybvopom2#

这可能会有帮助,但我遇到了webdriver不点击按钮的问题,当我使用id来找到它。我发现的工作是使用xpath而不是id。像这样,值得一试。

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

相关问题