python+selenium定位到却无法点击

前端的代码使用了框架,导致我们测试定位元素不稳定,如果直接使用d.find_element_by_xpath()是无法点击到的,我结合前辈的文字自己总结的几种方法:

1.ActionChains用法

click_btn = driver.find_element_by_xpath(path)
ActionChains(driver).click(click_btn).perform()

这个代码是将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。

2.WebDriverWait显示等待

WebDriverWait(d, 3).until(EC.presence_of_element_located((By.XPATH, ex)))

具体代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def text_show(d, ex):
    try:
        WebDriverWait(d, 10).until(
            EC.presence_of_element_located((By.XPATH, ex)))
    except Exception as e:
        return False
    else:
        return True

把xpath传入函数中,10秒内不断寻找,如果2秒内找到,剩下时间8秒不会等待,直接执行下一步;如果没找到,就会抛出异常,这里我使用了try except ,所以他只会返回False。

还可以吧这个方法当作断言,当新增一条数据后调用该方法,如果找不到指定数据,则表示新增失败,test中使用

self.assertFalse(text_show(self.d, ‘//*[@class="el-table__fixed-right"]//div[contains(text(),“XX”)]’))

进行断言。

此时可能有人会问,新增的数据你是如何知道该元素的ID或xpath,这里我用到的是xpath中的contains(text(),“XX”),它会匹配包含给定文本的元素。例如,我知道页面table的class为el-table__fixed-right,我就可以指定匹配table中是否包含我想要的text。

3.Keys键盘事件

这个方法是目前我使用过程中感觉最稳定也最方便的,click和Keys.ENTER效果是一样的,但是一样的效果却不用写多余的代码,使用最原始的d.find_element_by_xpath()即可。

d.find_element_by_xpath(‘.........’).send_keys(Keys.ENTER)

此文章自用,如有相同内容请谅解


版权声明:本文为qq_36562656原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。