如何select selenium test中的第一个li元素?
How to select the first li element in selenium test?
标签的结构如截图所示
我正在尝试使用此 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"}
我尝试了一些变体,但无法获得我想要的结果。 select 所述元素的最佳方式是什么?
编辑
我在 chrome 的开发者控制台中尝试了 css select 或 .members-holder .invitation-holder:first-child
的替代方法,并且它有效。但是当我将它插入 python selenium 代码时,会抛出相同的异常。
尝试用这种方式识别元素。
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 中锻炼身体。
希望对你有帮助。
首先,您应该修复 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
标签的结构如截图所示
我正在尝试使用此 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"}
我尝试了一些变体,但无法获得我想要的结果。 select 所述元素的最佳方式是什么?
编辑
我在 chrome 的开发者控制台中尝试了 css select 或 .members-holder .invitation-holder:first-child
的替代方法,并且它有效。但是当我将它插入 python selenium 代码时,会抛出相同的异常。
尝试用这种方式识别元素。
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 中锻炼身体。 希望对你有帮助。
首先,您应该修复 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