【问题标题】:Selenium locating elements by more than one method不止一种方法对硒元素进行定位
【发布时间】:2019-03-14 18:44:23
【问题描述】:

我正在使用 Selenium 来定位页面中的元素。有没有办法将两种方法结合在一起? 示例:

方法一:driver.find_elements_by_partial_link_text('html')

方法二:driver.find_elements_by_class_name('iUh30')

理想情况下,我会喜欢一种方法,它可以找到同时指定了部分链接文本和类名的元素。

【问题讨论】:

    标签: python-3.x selenium-webdriver


    【解决方案1】:

    您可以使用 xpath 来组合两个选择器:

    driver.find_elements_by_xpath("//*[@class='iUh30'][text()[contains(.,'html')]]")

    //* 查找带有任何标签的任何元素。可能是<a>,可能是<div><input>,任何东西。您可以将其更改为所需的标签。

    上面通过exact类名查找元素。也可以使用[contains(@class, 'partial_class')]按部分类查找元素。

    [text()[contains(.,'html')]] 查找部分文本为“html”的元素

    【讨论】:

    • 如果我错了,请纠正我,'text' 与 'link_text' 不同。在第一种情况下,该方法将查看显示/可见链接是否包含“文本”,而后一种方法将查看链接(即使未完全显示/可见)是否包含“文本”
    • partial link text 即使链接不可见也能找到元素。所有选择器都会查找存在于DOM 中的元素。为了检查它们的可见性,我们使用is_displayed() 方法。
    • @user1783739 并确保您查找链接使用<a> 标签而不是*,如下所示://a[@class...
    • 您可以(并且应该)将[text()[contains(.,'html')]] 减少到[contains(.,'html')]。此外,链接文本需要 A 标签,因此您的 //* 应该是 //a 以满足 OP 的要求。
    • @user1783739 text 是元素中包含的文本。 link_text 只是 text 但专门用于 A 标记。因此,如果您正在查看 A 标记,link_texttext 是相同的。
    【解决方案2】:

    如果您想捕获所有包含 iUh30 的类,请使用以下 xpath

    //*[contains(@class,'iUh30')] | //*[text()[contains(.,'html')]]
    

    否则,如果您只想要在类中具有精确文本 iUh30 的元素

    //*[@class='iUh30'] | //*[text()[contains(.,'html')]]
    

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 2019-09-30
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多