如何使用 Selenium 和 Python 单击启用 ember.js 的按钮 [英] How to click on the ember.js enabled button using Selenium and Python
问题描述
我一直试图使这个可点击,但我无法理解我做错了什么.我也在尝试诱导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[密码"])driver.find_element_by_id('idSIButton9').click()延迟()#登录按钮driver.find_element_by_id('idSIButton9').click()#Button 下面我无法被点击使用 webdriver.Chrome() 作为驱动程序:等待 = WebDriverWait(驱动程序,7)wait.until(presence_of_element_located((By.CSS_SELECTOR, "#ember1053")))driver.find_element(By.id, "ember1053").click()
这是我试图使其可点击的按钮的源代码:
<button aria-live="礼貌";类型=按钮"tabindex=0";data-m="{"aN":"shoppingCart","cN":"PlaceOrder","bhvr";:80}"id=ember1053"class=btn 主题-默认 btn-primary cli-purchase ember-view"><!---->下订单</button></div> 解决方案 所需元素是 Ember.js 元素和
的 id
属性值将不断动态变化,每次访问 AUT(被测应用程序).因此,要在元素上 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' 并开始-with(@id,'ember')][contains(., 'Place order') 和@aria-live='polite']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import By从 selenium.webdriver.support 导入 expected_conditions 作为 EC
参考文献
您可以在以下位置找到一些相关的详细讨论:
I have been trying to make this clickable and I just cannot understand what I am doing wrong.
I am also trying to induce webdriverwait, so that it is clicked when it appears.
This is my code so far:
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()
this is the source code for the button that I am trying to make clickable:
<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>
解决方案 The desired element is an Ember.js element and the value of the id
attribute of the <button>
will keep changing dynamically, every time you access the AUT(Application Under Test). Hence to click()
on the element you have to induce WebDriverWait for the element_to_be_clickable()
and you can use either of the following Locator Strategies:
Using 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()
Using 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()
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
References
You can find a couple of relevant detailed discussions in:
这篇关于如何使用 Selenium 和 Python 单击启用 ember.js 的按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文