Selenium Webdriver Python - 检查元素是不是可见/检测到/存在[重复]

Posted

技术标签:

【中文标题】Selenium Webdriver Python - 检查元素是不是可见/检测到/存在[重复]【英文标题】:Selenium Webdriver Python - Check if element is visible/detected/present [duplicate]Selenium Webdriver Python - 检查元素是否可见/检测到/存在[重复] 【发布时间】:2021-03-19 09:58:53 【问题描述】:

我想检查 Selenium Web 驱动程序对于以下 XPath 是否可见/存在/检测到元素:

//*[@data-animate-modal-popup="true"]

是否有任何 Selenium 的函数在该元素可见/存在/检测到时返回 TRUE 或 FALSE?

上次我使用以下 IF - Else

phone_number_invalid = driver.find_element_by_xpath('//*[@data-animate-modal-popup="true"]')
if phone_number_invalid:
     code here .....

find_element_by_xpath 在找不到元素时总是抛出错误。我只想在元素可见/存在/检测到时获得 TRUE 或 FALSE。

谢谢。

【问题讨论】:

【参考方案1】:

没有原生元素来检查是否存在您可以使用的元素:

创建一个函数:

public boolean isElementPresent(By by)
        try
            driver.findElement(by);
            return true;
        
        catch(NoSuchElementException e)
            return false;
        
    

现在在你的 if 案例中调用它:

 if(isElementPresent(By.xpath("//div[contains(text(),'Report name already exists. Please enter another name.')]")))
   
       //code
   
   else if(isElementPresent(By.xpath("//div//span[contains(text(),'Grid Report saved successfully.')]")))
   
       //code
   

第二个选项:

List<WebElement> element1 = driver.findElement(By.xpath("//div[contains(text(),'Report name already exists. Please enter another name.')]"));
   List<WebElement> element2 = driver.findElement(By.xpath("//div//span[contains(text(),'Grid Report saved successfully.')]"));

   if(element1.isEmpty() )
   
       //first set of code
   
   else if(element2.isEmpty())
   
       //second set of code
   

第二个选项处理更多,因此更推荐第一个选项

【讨论】:

【参考方案2】: 为方便起见,您为什么不使用扩展程序。 带镀铬: 使用“Xpath helper”检查元素:

https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=en

使用“Xpath finder”查找元素:

https://chrome.google.com/webstore/detail/xpath-finder/ihnknokegkbpmofmafnkoadfjkhlogph?hl=en

【讨论】:

【参考方案3】:

对于您的问题,您是否已经找到了该元素,或者您需要在某些操作后检查该元素是否可见?

    如果您已经拥有该元素

使用元素中的方法is_displayed。 例如:

# you have located element and assign it to elem
visibility = elem.is_displayed()
print(visibility) # will print True or False
    如果您需要检查元素在某些操作后是否可见

使用fluent wait,并用try except包裹它。

from selenium.common.exceptions import TimeoutException

def check_visible_by_xpath(xpath, timeout=2):
    # Will actively search for the element in 2 seconds.
    # If found, return True and stop waiting.
    # If 2 seconds threshold reaches, return False (cannot find it visible in 2 seconds)
    try:
        element = WebDriverWait(driver, timeout).until(
            EC.visibility_of_element_located((By.XPATH, xpath)))
        return True
    except TimeoutException:
        return False



# ...
# Some actions here
type_in_phone_number()
# Now you want to check, if after your previous action, something pops up??

visibility = check_visible_by_xpath('//*[@data-animate-modal-popup="true"]', 2)
# check and do something about it
if visibility:
    action_if_visible()
else:
    action_if_not_visible()

【讨论】:

以上是关于Selenium Webdriver Python - 检查元素是不是可见/检测到/存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriver(Python)API

[python] python+selenium+webdriver

[python] python+selenium+webdriver

selenium webdriver (python)大全

python+selenium—webdriver入门

转载selenium+Python WebDriver之selenium的定位以及切换frame(iframe)