Selenium 및 Python을 사용하여 ember.js 활성화 버튼을 클릭하는 방법

Nov 21 2020

나는 이것을 클릭 가능하게 만들려고 노력해 왔으며 내가 뭘 잘못하고 있는지 이해할 수 없습니다. 나는 또한 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>

답변

DebanjanB Nov 22 2020 at 20:59

원하는 요소는 Ember.js 요소이며의 id속성 값은 AUT (Application Under Test)에<button> 액세스 할 때마다 계속 동적으로 변경됩니다 . 따라서에 요소에 당신은 유도해야 WebDriverWait을 을 위해 당신은 다음 중 하나 사용할 수 있습니다 로케이터 전략 :click()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
    

참고 문헌

다음에서 몇 가지 관련 세부 토론을 찾을 수 있습니다.

  • 셀레늄-불씨를 기반으로 요소 찾기
  • Ember 드롭 다운 셀레늄 xpath
ImCrimson Nov 22 2020 at 05:17

이것은 도움이 될 수 있지만 ID를 사용하여 찾을 때 버튼을 클릭하지 않는 웹 드라이버에 문제가 있습니다. 내가 찾은 해결 방법은 ID 대신 xpath를 사용하는 것입니다. 이렇게 시도해 볼 가치가 있습니다.

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