Python+Selenium定位悬停元素总是报错,啥原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+Selenium定位悬停元素总是报错,啥原因相关的知识,希望对你有一定的参考价值。

参考技术A #coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import os,time
driver=webdriver.Chrome()
driver.get("http://192.168.0.222:8085/zfgtaiAdmin/Product/loginBackground.jsp")
time.sleep(3)
#driver.maximize_window()
driver.find_element_by_id("username").clear()
driver.find_element_by_id("username").send_keys("15112304365")
driver.find_element_by_id("username").send_keys(Keys.TAB)
time.sleep(4)
driver.find_element_by_id("password").send_keys("System.out.print")
driver.find_element_by_css_selector("input[type=\"button\"]").click()
driver.find_element_by_link_text("产品管理").move_to_element("产品管理").perform()
#WebDriverWait(driver,10).until(lambda the_driver)
WebDriverWait(driver,10).until(lambda the_driver:the_driver.find_element_by_link_text("产品管理").is_displayed())
menu= driver.find_element_by_link_text("产品管理").find_element_by_link_text("产品发布")
webdriver.ActionChains(driver).move_to_element(menu).perform()
time.sleep(5)
driver.quit()
Traceback (most recent call last):
File "E:\WorkSpace\Selenium 1\src\Test14__init__.py", line 22, in
driver.find_element_by_link_text("产品管理").move_to_element("产品管理").perform()
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 317, in find_element_by_link_text
return self.find_element(by=By.LINK_TEXT, value=link_text)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
'value': value)['value']
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element
(Session info: chrome=50.0.2661.102)
(Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86)
这是什么问题啊?

我认为是PYTHON2.7支持UNICODE的问题,建议采用PY3.0以后版本。

悬停后如何定位内部元素(Selenium)

【中文标题】悬停后如何定位内部元素(Selenium)【英文标题】:How to locate inner element after hovering (Selenium) 【发布时间】:2021-11-25 00:06:19 【问题描述】:

我需要找到并点击我的帐户

我可以看到父 div header-menu-dropdown account-item 然后有一个孩子,那个孩子有另一个孩子,其中包含两个元素,即两个 href 文本

我可能会找到具有带有链接类的 header-menu-item 的元素数组,然后选择第一个元素来定位我需要的内容,但有更好的方法吗?

【问题讨论】:

//a[text()='我的帐户'] 【参考方案1】:

你想要做的方式是这样的:

//div[@class='header-menu-item with-link']

然后你可以写:

//div[@class='header-menu-item with-link']/a

或者如果你有一个带有这个header-menu-item with-link的网络元素

直接使用.//afindElement

最佳做法

但就个人而言,我不希望为此使用 xpath

请尝试

linkText

partialLinkText

由于您在 achor 标记 中查看的元素,linkText 应该可以工作。

【讨论】:

【参考方案2】:

工作解决方案如下(带有链接文本):

@FindBy(linkText = "My account")
private WebElement myAccount;

public MyAccountPage openMyAccountPage() 
    Actions actions = new Actions(driver);
    actions.moveToElement(username).perform();
    actions.moveToElement(myAccount).click().perform();
    return new MyAccountPage(driver);
    

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:

首先将鼠标悬停在个人资料图标/您的姓名上,然后点击元素。

By myAccountTxt = By.xpath("//a[text()='My account']");
By profileIcon = By.xpath("your profile icon xpath or custom xpath");
            
            // Moving cursor to the profile icon
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(profileIcon));
action.build().perform();

            // clicking the my account text
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(myAccountTxt));
wait.until(ExpectedConditions.visibilityOfElementLocated(myAccountTxt));
driver.findElement(myAccountTxt).click();

【讨论】:

以上是关于Python+Selenium定位悬停元素总是报错,啥原因的主要内容,如果未能解决你的问题,请参考以下文章

悬停后如何定位内部元素(Selenium)

Python selenium PO By.XPATH定位元素报错

python selenium 模拟鼠标悬停,为啥看不到效果

python+selenium怎么定位页面弹窗的元素

selenium+Python页面元素定位问题

python+selenium 定位元素