[-006-]-Python3+Unittest+Selenium Web UI自动化测试之悬浮窗口中的元素点击

1.分析现状:
PPT模板悬浮出现悬浮窗口
悬浮窗口中分为4大类:PPT模板,PPT模板页,PPT关系图,PPT图表
大类下存在小类点击可跳转
但是此页面里还存在PPT模板下的总结汇报等此种情况的元素
此情况如果仅用 text定位是无法定位到的
所以排除了text定位方式
2.解决方法:
首先我们看下悬浮窗口的元素规则

有比较清晰的元素规则
3.怎么定位到具体的元素呢
首先我们找到一个唯一标识:id="hoverCard449"

所以我们很快就能写出,其中i和m为变化的数字
//*[@id='hoverCard449')]/div/div/div/div[i]//div[2]/div[m]/a
但是我们会发现此id后面的值中存在数字,明显数字代表每次都会改变,所以我们改变一下:
//*[contains(@id,'hoverCard')]/div/div/div/div[i]//div[2]/div[m]/a
4.具体实现
a. 悬浮PPT模板
self.actionChains("//*[@class='mr-1' and text()='PPT模板']","xpath")
b.点击大类下的内容实现跳转
def return_element_action_to_click(self,fun,content_pre,content_mid,content_end,method,text): """ :param text: :return: """ # 获取大类的下标 i = [k for k,v in enumerate([(t.split("\n")) for t in self.getElementsText(content_pre, method)]) if v[0] == text][0]+1 # 获取大类下内容的下标 m = [k for k,v in enumerate(self.findElementsByMethod(content_pre + "[{}]".format(i) + content_mid, method)) if v.text == fun][0]+1 return [v for v in self.findElementsByMethod(content_pre + content_mid.format(i) + "[{}]".format(m) + content_end, method) if v.text == fun][0].click()
其中:
数据源为:["PPT模板",["总结汇报","竞聘述职","教学课件","学术答辩","企业宣传","商务培训","营销策划","商业计划书","灵感创意"]]
fun为:["总结汇报","竞聘述职","教学课件","学术答辩","企业宣传","商务培训","营销策划","商业计划书","灵感创意"]中的值
text为:PPT模板
content_pre为://*[contains(@id,'hoverCard')]/div/div/div/div
content_mid为:/div[2]/div
content_end为:/a
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。

浙公网安备 33010602011771号