【问题标题】:How to create Xpath for clickable text in Selenium Webdriver (Python)?如何在 Selenium Webdriver (Python) 中为可点击文本创建 Xpath?
【发布时间】:2018-04-23 19:00:52
【问题描述】:

我正在使用此代码代码:

我正在尝试在网页中查找文本“分支选择”以单击它。

所以我这样做:

driver.find_elements_by_xpath("//*[contains(text(), 'Branch Selection')]").click()

它不会引发错误,但不会发生点击。我究竟做错了什么?

【问题讨论】:

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


    【解决方案1】:
    1. 如果它点击但没有任何反应,请先尝试添加一个像sleep(5) 这样的睡眠来帮助调试,然后再点击看看是否是因为 Selenium 认为页面加载时实际上没有完成加载。如果您可以在睡眠 5 秒后单击,那么您需要使用 WebDriverWait 和 EC,如 @DebanjanB 所示。在最坏的情况下,您必须在代码中使用睡眠,但要尽量缩短睡眠时间。

    2. 否则,页面上可能会有多个带有Branch Selection 文本的元素,例如在元标记中。尝试使用下面的 XPATH 示例来隔离 XPATH 查找:

    "//button[.//*[contains(text(), 'Branch Selection')]]"

    或者如果页面上有多个包含该文本的短语,请使用以下选择确切的文本

    "//button[.//*[text()='Branch Selection']"

    这将选择具有您要查找的文本的子元素的按钮元素。更多 XPATH 细节在这里:https://devhints.io/xpath

    【讨论】:

      【解决方案2】:

      根据提供的 HTML 以单击文本为 Branch Selection 的元素,您需要诱导 WebDriverWait 以使元素可单击,如下所示:

      • CSS_SELECTOR

        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support import expected_conditions as EC
        # lines of code
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.item.item-block.item-md div.input-wrapper>ion-label.label.label-md[id^=lbl-]"))).click()
        
      • XPATH

        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support import expected_conditions as EC
        # lines of code
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='item item-block item-md']//div[@class='input-wrapper']/ion-label[@class='label label-md' and starts-with(@id,'lbl-') and contains(.,'Branch Selection')]"))).click()
        

      【讨论】:

      • 我正在尝试使用建议的 Xpath 方法,但出现 TimeoutException 错误。这是否意味着 Xpath 错误?
      • @sprogisd 可能我在从 HTML 快照复制时输入了错误的标签/属性。基于文本的格式化 HTML 会有所帮助。但另一方面可能是从您提供的 HTML 派生的xpath 可能不是唯一,我们可能需要更多的 outerHTML
      • @sprogissd TimeoutException 错误表示未找到该元素。你能检查一下这个讨论吗? stackoverflow.com/questions/48471321/…
      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      相关资源
      最近更新 更多