Selenium:使用“ if”来判断元素是否存在时出错

时间:2018-08-14 09:56:15

标签: python selenium webdriver

对不起,如果我问一个重复/愚蠢的问题。我对如何确定某个元素是否存在感到困惑。错误:如果您运行以下代码,则会弹出“找不到ID“ smc””。

if driver.find_element_by_id("smc"):
    print("Yes")
else:
    print("No")

以下代码将起作用:

try:
    verification = driver.find_element_by_id("smc")
except NoSuchElementException:
    print("No exits")

登录页面后,它将输入以下选项之一。如果页面中的一个页面具有“其自己的元素”,则要相应地进行下一步。

1.1 page 1 
-How to verify: driver.find_element_by_id("smc")
-Next step: func1()
1.2. page 2 
-How to verify: driver.find_element_by_id("editPage")
-Next step: print("You need retry later") and exit the code
1.3. page 3
-How to verify: driver.find_element_by_id("cas2_ilecell")
-Next step: func2()

我如何完成任务?当我尝试使用“ if”时,它不起作用。...

非常感谢您。

4 个答案:

答案 0 :(得分:1)

您在问题中写了解决方案本身。如果WebDriver无法使用给定的定位器查找元素,则抛出NoSuchElementException,并且您需要使用try-except来处理它,如果您希望代码转到备用路径。

如果您不想处理异常,则可以使用的其他选项是driver.find_elements。它返回匹配定位器的元素列表,如果找不到则返回一个空列表。所以你会做类似-

count = len(driver.find_elements_by_id('some_id'))
if count == 0:
   //element was not found.. do something else instead

答案 1 :(得分:1)

尝试替换

if driver.find_element_by_id("smc")

使用

if driver.find_elements_by_id("smc")

答案 2 :(得分:0)

您可以编写自己的方法来检查元素是否存在(例如Java):

public boolean isExist(WebDriver driver, By locator) {
    try {
        return driver.findElement(locator) != null;
    } catch (WebDriverException | ElementNotFound elementNotFound) {
        return false;
    }
}

在python中,可能看起来像(不确定!)这样:

def isExist(driver, by, locator):
    try:
        return driver.find_element(by, locator) is None
    except NoSuchElementException:
        return False

def isExist(driver, id):
    try:
        return driver.find_element_by_id(locator) is None
    except NoSuchElementException:
        return False

并使用它:

if isExist(driver, "smc")
   fun1()

答案 3 :(得分:0)

根据您的问题来确定三个选项并相应地运行下一步,您可以使用以下解决方案:

  • 您可以将 function 编写为test_me(),它将参数作为元素的id并提供如下状态:

    def test_me(myString):
        try:
            driver.find_element_by_id(myString)
            print("Exits")
        except NoSuchElementException:
            print("Doesn't exit")
    
  • 现在,您可以在代码中的任何位置调用函数 test_me(),如下所示:

    test_me("smc")
    #or
    test_me("editPage")
    #
    test_me("cas2_ilecell")