无法使用 XPATH 与特殊情况下提交的文本进行交互

Not able to use XPATH to interactive with the text filed in my special case

提问人:user3595231 提问时间:10/24/2023 更新时间:10/24/2023 访问量:21

问:

从下图中,我正在尝试清除“服务器地址”字段,并输入一个新值。但不知何故,它一直给我超时异常。enter image description here

这是我的通用 Python 代码。我可以尝试其他方法吗?

  try:
        target = "//label[contains(text(), 'Server address')]/following-sibling::input"
        WebDriverWait(self.driver, 30).until(
            EC.presence_of_element_located((By.XPATH, target))).clear()
        WebDriverWait(self.driver, 30).until(
            EC.presence_of_element_located((By.XPATH, target))).send_keys(var)
    except Exception as e:
        ....

感谢您的帮助。

千斤顶

selenium-webdriver xpath

评论

0赞 kenneth 10/24/2023
您的 XPath 是否在 //iframe HTML 祖先中?
0赞 KunduK 10/24/2023
我可以看到该元素在 iframe 内。您需要先切换到 iframe 才能访问 iframe 中的元素。

答:

1赞 kenneth 10/24/2023 #1

我看到 XPath 存在于 .在处理 iframe 时,有一种特定的方法,您可以在此处阅读。但简单来说,这意味着:您需要切换到 iframe,它被 Selenium 视为一个单独的窗口。iframe

  1. 为您尝试交互的 HTML 元素的祖先编写一个 XPathiframe
  2. 根据您使用的正确语言使用 Selenium 文档
  3. 成功切换到 后,您现在可以与正确的 HTML 元素进行交互iframe//label[contains(text(), 'Server address')]/following-sibling::input
1赞 KunduK 10/24/2023 #2

您尝试访问的元素位于 .您需要切换到 first 才能访问该元素。iframeiframe

WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe#main")))
try:
   target = "//label[contains(text(), 'Server address')]/following-sibling::input"
   WebDriverWait(self.driver, 30).until(
            EC.element_to_be_clickable((By.XPATH, target))).clear()
   WebDriverWait(self.driver, 30).until(
            EC.element_to_be_clickable((By.XPATH, target))).send_keys(var)
except Exception as e: