【问题标题】:How to click on the ember.js enabled button using Selenium and Python如何使用 Selenium 和 Python 点击​​启用 ember.js 的按钮
【发布时间】:2020-11-22 04:58:24
【问题描述】:

我一直在尝试使它可点击,但我无法理解我做错了什么。 我也在尝试诱导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>

【问题讨论】:

    标签: python selenium-webdriver xpath ember.js css-selectors


    【解决方案1】:

    所需的元素是Ember.js 元素,并且&lt;button&gt;id 属性的值将在您每次访问AUT(被测应用程序) 时动态变化。因此,在元素上click() 必须为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

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

    参考文献

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

    【讨论】:

    • @Roger 如果此/任何答案对您/对您有帮助,对未来的读者有帮助,请为答案投票。
    【解决方案2】:

    这可能会有所帮助,但是当我使用 id 查找它时,我遇到了 webdriver 没有单击按钮的问题。 我发现的解决方法是使用 xpath 而不是 id。 像这样,值得一试。

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

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2020-05-04
      • 1970-01-01
      • 2021-04-19
      • 2018-08-22
      • 2014-02-16
      • 2016-05-08
      • 2021-09-14
      • 2018-05-11
      相关资源
      最近更新 更多