【问题标题】:Selenium/python 2.7 How to use if/else with find_element?Selenium/python 2.7 如何将 if/else 与 find_element 一起使用?
【发布时间】:2015-10-04 00:40:43
【问题描述】:

我想说的是,如果 element1 显示,单击,如果不检查 element2 是否显示,单击等。但是当元素不存在时,我的代码会停止。如果 element1 存在,它会单击它,如果它不存在,代码会停止,但我希望它继续遍历每个 elif,直到找到一个,感谢任何帮助。

from selenium import webdriver

fp = webdriver.FirefoxProfile('')
driver = webdriver.Firefox(firefox_profile=fp)
driver.set_window_size(1400, 1000)
driver.get('')

elem1 = driver.find_element_by_xpath("//img[@title='img1']")

elem = driver.find_element_by_xpath("//img[@title='img2']")

if elem.is_displayed():
    elem.click()
    print "true"
elif elem1.is_displayed():
    elem1.click()
    print "1true"
else:
    print "false"

错误是

selenium,common.exceptions.NoSuchElementException:消息:无法定位元素:{"method":"xpath","selector":"//img[@title='img1']"}

【问题讨论】:

  • “代码停止”是什么意思 - 您是否遇到任何错误?另外,这两个 xpath 表达式是否相同是故意的吗?谢谢。
  • 与答案无关...但我建议您更清楚地命名变量。我会将elem1 重命名为image1 并将elem 重命名为image2 或更清晰的名称。它将使您的代码对您和其他人来说更具可读性和可理解性。

标签: python selenium if-statement element


【解决方案1】:

错误意味着根本没有找到一个元素。换句话说,它没有不显示,它不存在

我会制作一个元素/定位器列表(假设您想对其进行缩放),遍历列表并处理 NoSuchElementException 错误。单击元素后退出循环:

from selenium.webdriver.common.by import By

locators = [
    (By.XPATH, "//img[@title='img1']"),
    (By.XPATH, "//img[@title='img2']")
]

for by, value in locators:
    try:
        driver.find_element(by, value).click()
        break  # exit once we click an element
    except NoSuchElementException:
        pass  # element is not present - okay, move on

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2016-11-04
    • 2016-05-31
    相关资源
    最近更新 更多