繁体   English   中英

find_element() with Link_Text 无法使用 Selenium Python

[英]find_element() with Link_Text not working using Selenium Python

每当我尝试使用idnamexpath或任何它给出相同错误的东西查找元素时,我都是 selenium 的新手

from selenium import webdriver
driver = webdriver.Safari()
driver.get('https://www.lambdatest.com/blog/selenium-safaridriver-macos/')
driver.find_element(By.Link_Text,'Webinar' )

它通过下划线显示错误。 我试着写

driver.find_element_by_id('Webinar')

但它不是 go 通过我尝试了不同的网站和不同的元素,如 class,id 但似乎通过任何方法查找元素都有问题是否需要安装一些东西才能使其工作?

你必须在这里处理几件事:

  • 支持的定位器策略应该是LINK_TEXT而不是Link_Text

  • link_text应该是Webinars而不是Webinar

  • 实际上,您的代码行应该是:

     driver.find_element(By.LINK_TEXT, 'Webinars' )

但是,在网页中有多个元素innerText as Webinars 因此,您需要使用定位器策略来唯一标识 DOM 中的元素。


解决方案

理想情况下,要从带有文本作为Webinars菜单容器中定位可点击元素,您需要为element_to_be_clickable()引入WebDriverWait并且您可以使用以下任一定位器策略

  • 使用CSS_SELECTOR

     element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.menu-menu-1-container a[href='https://www.lambdatest.com/webinar/']")))
  • 使用XPATH

     element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='menu-menu-1-container']//a[text()='Webinars']")))
  • 注意:您必须添加以下导入:

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

这个

driver.find_element(By.Link_Text,'Webinar')

应该

driver.find_element(By.LINK_TEXT, 'Webinar')

此外, from selenium.webdriver.common.by import By

如果您使用的是 Selenium4,那么您不应该真正使用:

driver.find_element_by_id('Webinar')

改用这个:

driver.find_element(By.ID, 'Webinar')

如果你看一下源代码,你会看到:

class By(object):
    """
    Set of supported locator strategies.
    """

    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM