xpath定位动态属性的元素


重新学习selenium的各种元素定位。昨天就和上传文件杠上了。

拿来练手的是163邮箱,结果发现添加附件按钮死活定位不到。—— 花了一天时间,用chrome自带的控制台查看元素,xpath、css、fullxpath都试过不行,

包括下载插件katalon recorder 录制的脚本不行,又下载BlazeMeter,录制的脚本还是不行。

 

—— 到最后,才发现这个元素是动态属性,它的爸爸,爸爸的爸爸,爸爸的爸爸的爸爸……也都是动态属性的,往上追了很多代才找到一个固定属性的id,

还是用xpath定位的。

把代码贴出来,供大家参考。【xpath定位元素:外面单引号,里面双引号】

e2='//*[@id="_dvModuleContainer_compose.ComposeModule_0"]/div[1]/section/header/div[3]/div[1]/div[2]/input'
driver.find_element_by_xpath(e2).send_keys(r'C:\Users\stonmy\Desktop\UI\fla.jpg') #点击添加附件 并上传图片

 

ps:元素定位不到的情况,首先想要用多种方式来尝试定位--查看是否有iframe、是否有动态属性的原色--借助插件录制脚本。

遇到类似场景:一定要一层一层往上追踪,不要嫌麻烦。

如果你有更好的方法,也可以分享一下。

 

import time

from selenium import webdriver


driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
driver.maximize_window()

driver.implicitly_wait(10)
driver.find_element_by_id('lbNormal').click()

driver.implicitly_wait(10)
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe'))
driver.implicitly_wait(10)
driver.find_element_by_name('email').send_keys('13923830000')
driver.find_element_by_name('password').send_keys('mima') #输入正确的密码
driver.find_element_by_id('dologin').click()

driver.implicitly_wait(50)
h = driver.current_window_handle
driver.switch_to.window(h)
driver.implicitly_wait(40)
driver.find_element_by_id('_mail_component_19_19').click() #点击首页的写信按钮


driver.implicitly_wait(50)
h1 = driver.current_window_handle
driver.switch_to.window(h1)
driver.implicitly_wait(40)

# 输入对方邮箱地址和邮件内容
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('120221363@qq.com') #输入收件人
driver.implicitly_wait(40)
e1='//*[@id="_dvModuleContainer_compose.ComposeModule_0"]/div[1]/section/header/div[2]/div[1]/div/div/input'
driver.find_element_by_xpath(e1).send_keys('春天来了') #输入主题

driver.switch_to.frame(driver.find_element_by_class_name('APP-editor-iframe'))
driver.find_element_by_class_name('nui-scroll').send_keys('石头记,一部经典著作。值得看了一遍又一遍!')
driver.switch_to.default_content() #退出富文本的iframe
driver.implicitly_wait(50)

e2='//*[@id="_dvModuleContainer_compose.ComposeModule_0"]/div[1]/section/header/div[3]/div[1]/div[2]/input'
driver.find_element_by_xpath(e2).send_keys(r'C:\Users\stonmy\Desktop\UI\fla.jpg') #点击添加附件 并上传图片


driver.find_element_by_class_name('nui-toolbar-item').click() #点击发送按钮
driver.implicitly_wait(20)

# driver.find_element_by_id('_mail_button_10_229').click() #不输入主题时的弹窗确认
time.sleep(3)
driver.quit()


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM