[-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

 

posted @ 2023-11-08 12:07  旅行没有终点  阅读(150)  评论(0)    收藏  举报