使用Xpath定位不到元素

来源:3-2 最普通的自动化“裸奔状态”

qq_慕盖茨2229007

2022-07-20

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

# 启动浏览器
driver = webdriver.Chrome('D:\web\chromedriver.exe')

#启动网站
driver.get('http://127.0.0.1/zentao/user-login.html')

# 登录
driver.find_element(By.ID, 'account').send_keys('admin')
driver.find_element(By.NAME, 'password').send_keys('123456')
driver.find_element(By.ID, 'submit').click()

# 登录断言
sleep(1)
if driver.find_element(By.XPATH, '//div[@class="user-profile-name"]').text == 'admin':
    print('pass')
else:
    print('fail')

新版本禅道定位位置
图片描述
user-profile-name元素定位
图片描述

提示错误:

DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome('D:\web\chromedriver.exe')
Traceback (most recent call last):
  File "C:\Users\小跟班\PycharmProjects\pythonProject\nodeone.py", line 26, in <module>
    if driver.find_element(By.XPATH,'//span[@class="user-name"]').text == 'admin':
  File "D:\Project\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 857, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "D:\Project\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 435, in execute
    self.error_handler.check_response(response)
  File "D:\Project\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//span[@class="user-name"]"}
  (Session info: chrome=103.0.5060.114)
Stacktrace:
Backtrace:
	Ordinal0 [0x00FD6463+2188387]
	Ordinal0 [0x00F6E461+1762401]
	Ordinal0 [0x00E83D78+802168]
	Ordinal0 [0x00EB1880+989312]
	Ordinal0 [0x00EB1B1B+989979]
	Ordinal0 [0x00EDE912+1173778]
	Ordinal0 [0x00ECC824+1099812]
	Ordinal0 [0x00EDCC22+1166370]
	Ordinal0 [0x00ECC5F6+1099254]
	Ordinal0 [0x00EA6BE0+945120]
	Ordinal0 [0x00EA7AD6+948950]
	GetHandleVerifier [0x012771F2+2712546]
	GetHandleVerifier [0x0126886D+2652765]
	GetHandleVerifier [0x0106002A+520730]
	GetHandleVerifier [0x0105EE06+516086]
	Ordinal0 [0x00F7468B+1787531]
	Ordinal0 [0x00F78E88+1805960]
	Ordinal0 [0x00F78F75+1806197]
	Ordinal0 [0x00F81DF1+1842673]
	BaseThreadInitThunk [0x75FCFA29+25]
	RtlGetAppContainerNamedObjectPath [0x777E7A9E+286]
	RtlGetAppContainerNamedObjectPath [0x777E7A6E+238]

经过今天的研究发现在user-profile-name元素定位嵌套在iframe标签里修改代码之后还是有问题,获取的text为空,但是已检查Xpath路径是没有问题的

sleep(5)
framm=driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/iframe')
driver.switch_to.frame(framm)
#切换ifrme
#driver.switch_to.frame('appIframe-program')
sleep(15)
if driver.find_element(By.XPATH, '//div[@class="user-profile-name"]').text == 'admin':
    print('pass')
else:
    print('fail')

while 1:
    start = time.perf_counter()
    try:
        driver.switch_to.frame('appIframe-my')
        driver.find_element(By.XPATH, '//div[@class="user-profile-name"]').click()
        print ('已定位到元素')
        end=time.perf_counter()
        break
    except:
        print ("还未定位到元素!")
        break

pycharm 运行结果
fail
还未获取到元素

写回答

2回答

慕丝8522637

2022-08-19

鼠标悬停能解决,可是还是太麻烦,不知道安老版本会不会简单些
0
0

qq_慕盖茨2229007

提问者

2022-07-23

已解决此问题

0
1
告别可乐827
请问是怎么解决的,遇到了同样的问题
2022-12-10
共1条回复

Python自动化测试开发实战,能帮你就业的测试课

开发高扩展、高可用的自动化测试框架,利用好测试自动化技术。

445 学习 · 157 问题

查看课程