【问题标题】:How to select the first li element in selenium test?硒测试中如何选择第一个li元素?
【发布时间】:2015-04-08 20:18:28
【问题描述】:

标签的结构如截图所示

我正在尝试使用此 python 代码访问第一个 li 元素:

invitations = elem.find_element_by_css_selector('members-holder li#invitation-holder > :first-child')

elem 是一个非常顶级的元素,包含所有标签

我遇到了这个异常:

NoSuchElementException: Message: Unable to locate element: {"method":"css selector","selector":"members-holder li#invitation-holder > :first-child"}

我尝试了一些变化,但无法获得我想要的结果。选择上述元素的最佳方法是什么?

编辑

我在 chrome 的开发者控制台中尝试了一个替代的 css 选择器.members-holder .invitation-holder:first-child,它可以工作。但是当我将它插入 python selenium 代码时,会抛出相同的异常。

【问题讨论】:

  • 我认为是 el.find ,而不是 elem.find
  • 它在任何框架/iframe 下吗?还是加载需要时间?
  • @VivekSingh 你有一个很好的观点!一开始就隐藏了
  • 然后你可以使用等待条件来获得可见性。乐于助人..

标签: python selenium selenium-webdriver css-selectors webdriver


【解决方案1】:

首先,你应该修复你的 CSS 选择器:

.members-holder ul li.invitation-holder

而且,由于您需要第一个li,因此只需使用find_element_by_css_selector() method

driver.find_element_by_css_selector('.members-holder ul li.invitation-holder')

除此之外,您可能需要explicitly wait for the element to become visible

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

...
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, ".members-holder ul li.invitation-holder"))
)

如果您仍然会在尝试访问该元素时遇到异常,请检查一个元素是否在 iframe 内 - 如果是,请先切换到它:

frame = driver.find_element_by_id('frame_id')
driver.switch_to.frame(frame)

# find the element

【讨论】:

  • switch_to.frame('id') 提示特别有用!
【解决方案2】:

尝试使用这种方式识别元素。

WebElement parentDiv = driver.findElement(By.className("'members-holder"));

现在做

WebElement ul = parentDiv.findElement(By.tagName("ul"));
List<WebElement> lis = ul.findElements(By.tagName("li"));

第一个元素是

lis.get(0);

这是java代码。你可以在 python 中锻炼 equilent。 希望对您有所帮助。

【讨论】:

  • WebElement ul = parentDiv.findElements(By.tagName("ul")); 如何返回 SINGLE 元素?它应该返回一个列表
  • 我的错误。我纠正了它。希望能帮助到你。 @Saifur 感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2015-06-07
  • 2019-08-15
  • 2015-11-18
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多