Python 如何使用SeleniumWebDriver在svg标记中显示工具提示

Python 如何使用SeleniumWebDriver在svg标记中显示工具提示,python,selenium,svg,tooltip,action,Python,Selenium,Svg,Tooltip,Action,我试图将SeleniumWebDriver与Python结合使用,以svg标记显示工具提示,但失败了 以下是html: <body class="DA_SKINNED DA_GECKO DA_MAC"> <div id="email-server-admin-target" data-qradar-locale="en"> <div> <div id="header-container" class="spacing-md-y"> <head

我试图将SeleniumWebDriver与Python结合使用,以svg标记显示工具提示,但失败了

以下是html:

<body class="DA_SKINNED DA_GECKO DA_MAC">
<div id="email-server-admin-target" data-qradar-locale="en">
<div>
<div id="header-container" class="spacing-md-y">
<header class="header">
<h4 class="ibm-helvetica header-title">Email Server Management</h4>
<button class="header-action icon-button" type="button">
<svg class="header-action header-action-icon" fill-rule="evenodd" height="24" name="help" role="help" viewBox="0 0 24 24" width="24" aria-label="Email server configuration help" alt="Email server configuration help">
<title>Email server configuration help</title>
<path d="M10.84 17h2.15v-2.11h-2.15V17zm-2.21-6.62h2.01c0-.25.03-.48.09-.69.05-.22.14-.4.25-.56.11-.16.26-.29.44-.39.18-.09.39-.14.64-.14.36 0 .64.1.85.3.2.2.31.51.31.93.01.25-.04.45-.13.62-.1.16-.22.31-.38.45-.15.14-.32.27-.51.41-.18.14-.35.3-.51.49-.17.18-.31.41-.44.67-.12.27-.19.6-.22.99v.61h1.85v-.52c.03-.27.12-.5.26-.68.14-.18.3-.34.49-.49.18-.14.37-.28.58-.42.2-.14.39-.31.56-.51.17-.2.31-.45.42-.73.12-.28.18-.64.18-1.08 0-.26-.06-.55-.18-.86-.11-.3-.3-.58-.56-.85a3.2 3.2 0 0 0-1.05-.66c-.43-.18-.97-.27-1.62-.27-.5 0-.96.08-1.36.25-.41.17-.76.41-1.04.71-.29.3-.51.65-.67 1.06-.16.42-.25.87-.26 1.36zM23 12c0 6.08-4.93 11-11 11S1 18.08 1 12 5.93 1 12 1s11 4.92 11 11z"></path>
</svg>
</button>
</header>
</div>
</div>
</div>
</body>
使用上面的代码,当它运行到
工具提示。将\u移动到\u元素(helpIcon)。执行()
时,我可以看到图标改变颜色,就像将鼠标悬停在图标上一样,但工具提示不会弹出,也不会发生错误

我还尝试在下面将元素设置为两个xpath,但两者都找不到:

helpIcon=self.wfx(“/html/body/div/div/div[1]/header/button/svg”)

helpIcon=self.wfx(“/html/body/div/div/div[1]/header/button/svg/path”)


如何使用Selenium Webdriver使svg标记中的工具提示弹出?

我遇到过类似的问题,然后我使用sikuli工具悬停鼠标光标,我能够看到工具提示弹出窗口。

我遇到过类似的问题,然后,我使用sikuli工具将鼠标光标悬停,我能够看到工具提示弹出窗口。

要使用显示工具提示,您必须为位于()的元素的
可见性诱导WebDriverWait,并且您可以使用以下任一项:

  • 使用
    CSS\u选择器

    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body.DA_SKINNED.DA_GECKO.DA_MAC div#header-container button.header-action.icon-button")))).perform()
    
  • 使用
    XPATH

    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]")))).perform()
    
    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]/*[name()='svg'][@class='header-action header-action-icon' and @name='help]")))).perform()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
您可以在中找到相关的讨论


更新 似乎我们需要到达
标记才能触发工具提示,您可以使用以下解决方案:

  • 使用
    XPATH

    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]")))).perform()
    
    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]/*[name()='svg'][@class='header-action header-action-icon' and @name='help]")))).perform()
    

要使用显示工具提示,您必须为位于()的元素的
可见性诱导WebDriverWait,并且您可以使用以下任一项:

  • 使用
    CSS\u选择器

    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body.DA_SKINNED.DA_GECKO.DA_MAC div#header-container button.header-action.icon-button")))).perform()
    
  • 使用
    XPATH

    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]")))).perform()
    
    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]/*[name()='svg'][@class='header-action header-action-icon' and @name='help]")))).perform()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
您可以在中找到相关的讨论


更新 似乎我们需要到达
标记才能触发工具提示,您可以使用以下解决方案:

  • 使用
    XPATH

    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]")))).perform()
    
    ActionChains(self.browser).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[@class='ibm-helvetica header-title' and contains(.,'Email Server Management')]//following::button[1]/*[name()='svg'][@class='header-action header-action-icon' and @name='help]")))).perform()
    

我最终使用了完全不同的PyAutoGUI方法来触发工具提示:

import pyautogui

pyautogui.moveTo('The X and Y integer coordinates')
这可能不是一个完美的方式,但在我自己的情况下,标签的位置是固定的,所以这对我来说很有用


注意:如果工具提示仍然无法显示,请尝试移动或单击页面上的其他任何位置,然后返回。

我最终使用完全不同的PyAutoGUI方法触发工具提示:

import pyautogui

pyautogui.moveTo('The X and Y integer coordinates')
这可能不是一个完美的方式,但在我自己的情况下,标签的位置是固定的,所以这对我来说很有用


注意:如果工具提示仍然无法显示,请尝试移动或单击页面上的其他任何位置,然后返回。

谢谢,但这对我不起作用。结果是相同的,图标改变颜色就像在它上面悬停一样,它可以正确定位元素,但是工具提示不会弹出。我想知道问题是关于标记的,只是不知道如何处理它。@CathyWang查看更新的答案,让我知道我尝试过的状态,但仍然相同,它可以找到svg,但工具提示仍然没有弹出。注意:@name='help'缺少一个引号工具提示文本是什么?可能需要将鼠标悬停在其他元素上,显示的工具提示就是该元素。您能再次定位父元素吗?工具提示文本位于标记中,我已尝试,但无法定位。但是好消息!我只是让它与pyautogui.moveTo(x,y)一起工作,工具提示就会弹出。这可能不是一个完美的方式,但由于图标的位置是固定的,所以它适用于我的测试。谢谢你的回复。谢谢你,但这对我不起作用。结果是相同的,图标改变颜色就像在它上面悬停一样,它可以正确定位元素,但是工具提示不会弹出。我想知道问题是关于标记的,只是不知道如何处理它。@CathyWang查看更新的答案,让我知道我尝试过的状态,但仍然相同,它可以找到svg,但工具提示仍然没有弹出。注意:@name='help'缺少一个引号工具提示文本是什么?可能需要将鼠标悬停在其他元素上,显示的工具提示就是该元素。您能再次定位父元素吗?工具提示文本位于标记中,我已尝试,但无法定位。但是好消息!我只是让它与pyautogui.moveTo(x,y)一起工作,工具提示就会弹出。这可能不是一个完美的方式,但由于图标的位置是固定的,所以它适用于我的测试。谢谢你的回复。