如何验证 Python 上的 chromedriver window 页面中的按钮是否真的被禁用?硒相关
How to verify if a button from a page is really disabled in a chromedriver window on Python? Selenium related
我正在尝试在 this page 上自动化一个过程,经过几次尝试,我仍然没有弄清楚为什么下面的代码在检查 first_wallet_option
时打印 True
按钮已启用,此处:
driver.get('https://opensea.io/') #go to the opensea main page.
WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="__next"]/div/div[1]/nav/ul/div[2]/li/button'))) #wait for the wallet button to be enabled for clicking
wallet_button = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/nav/ul/div[2]/li/button')
wallet_button.click() #click that wallet button
first_wallet_option = driver.find_element(By.XPATH, "/html/body/div[1]/div/aside[2]/div[2]/div/div[2]/ul/li[1]/button")
print(first_wallet_option.is_enabled())
页面加载后,程序点击了页面右上角的钱包图标,根据其 html 来源,这些按钮显然是 disabled
至此完成,如下图:
但是,如果我点击同一个钱包图标两次(一次关闭旁边的元素,另一次再次打开它),它们就会被启用:
所以,我想了解如何改进上面的代码以确保它真正检测到所有这 4 个按钮(Metamask 和其他 3 个)何时启用。
好的,这是:
第一:定位器不够相关,所以我自由重构了它们。
第二:根据 DOM DOM Snapshot,MetaMask 不是按钮,但其余按钮是。但是,我没有依赖按钮,而是尝试依赖 li(这对所有人来说都很常见),并检查它们是否已启用。
第三:如果您试图查找是否所有 4 个元素都已启用,则必须使用 find_elements
而不是 find_element
,然后遍历元素以检查每个元素是否已启用。
请检查这是否适合您:
driver.get('https://opensea.io/') #go to the opensea main page.
WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, "//*[@title='Wallet']"))) #wait for the wallet button to be enabled for clicking
wallet_button = driver.find_element(By.XPATH, "//*[@title='Wallet']")
wallet_button.click() #click that wallet button
wallet_options = driver.find_elements(By.XPATH, "//*[@data-testid='WalletSidebar--body']//li")
for wallet in wallet_options:
if wallet.is_enabled():
print(f"{wallet.text} is enabled")
else:
print(f"f{wallet.text} is not enabled")
我正在尝试在 this page 上自动化一个过程,经过几次尝试,我仍然没有弄清楚为什么下面的代码在检查 first_wallet_option
时打印 True
按钮已启用,此处:
driver.get('https://opensea.io/') #go to the opensea main page.
WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="__next"]/div/div[1]/nav/ul/div[2]/li/button'))) #wait for the wallet button to be enabled for clicking
wallet_button = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/nav/ul/div[2]/li/button')
wallet_button.click() #click that wallet button
first_wallet_option = driver.find_element(By.XPATH, "/html/body/div[1]/div/aside[2]/div[2]/div/div[2]/ul/li[1]/button")
print(first_wallet_option.is_enabled())
页面加载后,程序点击了页面右上角的钱包图标,根据其 html 来源,这些按钮显然是 disabled
至此完成,如下图:
但是,如果我点击同一个钱包图标两次(一次关闭旁边的元素,另一次再次打开它),它们就会被启用:
所以,我想了解如何改进上面的代码以确保它真正检测到所有这 4 个按钮(Metamask 和其他 3 个)何时启用。
好的,这是:
第一:定位器不够相关,所以我自由重构了它们。
第二:根据 DOM DOM Snapshot,MetaMask 不是按钮,但其余按钮是。但是,我没有依赖按钮,而是尝试依赖 li(这对所有人来说都很常见),并检查它们是否已启用。
第三:如果您试图查找是否所有 4 个元素都已启用,则必须使用 find_elements
而不是 find_element
,然后遍历元素以检查每个元素是否已启用。
请检查这是否适合您:
driver.get('https://opensea.io/') #go to the opensea main page.
WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, "//*[@title='Wallet']"))) #wait for the wallet button to be enabled for clicking
wallet_button = driver.find_element(By.XPATH, "//*[@title='Wallet']")
wallet_button.click() #click that wallet button
wallet_options = driver.find_elements(By.XPATH, "//*[@data-testid='WalletSidebar--body']//li")
for wallet in wallet_options:
if wallet.is_enabled():
print(f"{wallet.text} is enabled")
else:
print(f"f{wallet.text} is not enabled")