码迷,mamicode.com
首页 > 其他好文 > 详细

xpath定位动态属性的元素

时间:2020-03-20 10:42:02      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:定位   脚本   scroll   pass   get   NPU   des   时间   contain   

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

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

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

 

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

还是用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(‘13923830417‘)
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()

xpath定位动态属性的元素

标签:定位   脚本   scroll   pass   get   NPU   des   时间   contain   

原文地址:https://www.cnblogs.com/stonmy2008/p/12530056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!