硒测试中如何选择第一个li元素?

Posted

技术标签:

【中文标题】硒测试中如何选择第一个li元素?【英文标题】:How to select the first li element in selenium test? 【发布时间】: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 你有一个很好的观点!一开始就隐藏了 然后你可以使用等待条件来获得可见性。乐于助人.. 【参考方案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 感谢您指出这一点。

以上是关于硒测试中如何选择第一个li元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决硒循环中的这个错误? InvalidSelectorException:消息:无效选择器:无法使用 xpath 定位元素

硒如何获取文本大小

选择除第一个之外的所有子元素

只选择jquery中的第一级元素

如何在硒测试中设置html元素的样式显示?

如何在jQuery中选择最后一个子元素?