以下是我的 python selenium 代码
def provideDetails(self, titleEleName, titleText, sbmtBtnName, dropdownOptn, dropdownName):
self.ui.jobs.setJobTitleEleName(titleEleName, titleText)
elem = self.ui.jobs.selectButton(dropdownName)
if elem.is_displayed():
self.ui.jobs.selectButton(dropdownName)
self.ui.sleep(4)
self.ui.jobs.selectAor(dropdownOptn)
else:
self.ui.jobs.selectAddAors(dropdownOptn)
self.ui.sleep(4)
self.ui.jobs.selectButton(sbmtBtnName)
我必须检查“elem”是否存在。 如果存在,则“if”条件应该发生,如果不存在,则“else”条件应该起作用。 我尝试了这段代码。我收到此错误“属性错误:无类型对象没有属性‘is_displayed’。 任何帮助,将不胜感激。谢谢。
此外,是否有任何替代方法来检查元素是否存在并遵循 if else 命令
最佳答案
一个好方法是使用 explicit wait 。期望检查元素是否存在于页面的 DOM 上并且可见。可见性是指元素不仅显示,而且高度和宽度都大于0。看例子:
self.ui.jobs.setJobTitleEleName(titleEleName, titleText)
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 5)
try:
wait.until(EC.visibility_of_element_located((By.NAME, dropdownName)))
self.ui.jobs.selectButton(dropdownName)
self.ui.sleep(4)
self.ui.jobs.selectAor(dropdownOptn)
except TimeoutException:
self.ui.jobs.selectAddAors(dropdownOptn)
self.ui.sleep(4)
self.ui.jobs.selectButton(sbmtBtnName)
使用 if/else 语句的解决方案:
def provideDetails(self, titleEleName, titleText, sbmtBtnName, dropdownOptn, dropdownName):
self.ui.jobs.setJobTitleEleName(titleEleName, titleText)
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 5)
elem = wait.until(EC.visibility_of_any_elements_located((By.NAME, dropdownName))) # will return a list of elements
if elem:
self.ui.jobs.selectButton(dropdownName)
self.ui.sleep(4)
self.ui.jobs.selectAor(dropdownOptn)
else:
self.ui.jobs.selectAddAors(dropdownOptn)
self.ui.sleep(4)
self.ui.jobs.selectButton(sbmtBtnName)
期望检查网页上至少有一个元素可见。 locator 用于查找元素,一旦找到,就会返回 WebElements 列表。
进口:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
关于python-3.x - 检查 python selenium 中是否存在元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51492715/