xpath定位动态属性的元素

Posted stonmy2008

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xpath定位动态属性的元素相关的知识,希望对你有一定的参考价值。

重新学习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:UsersstonmyDesktopUIfla.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:UsersstonmyDesktopUIfla.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定位动态属性的元素的主要内容,如果未能解决你的问题,请参考以下文章

selenium:Xpath定位详解

自动化定位——通过XPath定位元素

XPath怎样根据一个元素定位另外一个元素?

Robot Framework XPATH元素的定位(如何获取一个动态或具体的元素)

六:Appium元素定位xpath定位方式

在Selenium Webdriver中使用XPath ContainsSibling函数定位