https://blog.csdn.net/qq_36562656/article/details/91962129
前端的代码使用了框架,导致我们测试定位元素不稳定,如果直接使用d.find_element_by_xpath()是无法点击到的,我结合前辈的文字自己总结的几种方法:
click_btn = driver.find_element_by_xpath(path)
ActionChains(driver).click(click_btn).perform()
1
2
这个代码是将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。
WebDriverWait(d, 3).until(EC.presence_of_element_located((By.XPATH, ex)))
1
具体代码:
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
1
2
3
4
5
6
7
8
9
10
11
12
13
把xpath传入函数中,10秒内不断寻找,如果2秒内找到,剩下时间8秒不会等待,直接执行下一步;如果没找到,就会抛出异常,这里我使用了try except ,所以他只会返回False。
还可以吧这个方法当作断言,当新增一条数据后调用该方法,如果找不到指定数据,则表示新增失败,test中使用
self.assertFalse(text_show(self.d, ‘//*[@class="el-table__fixed-right"]//div[contains(text(),“XX”)]’))
1
进行断言。
此时可能有人会问,新增的数据你是如何知道该元素的ID或xpath,这里我用到的是xpath中的contains(text(),“XX”),它会匹配包含给定文本的元素。例如,我知道页面table的class为el-table__fixed-right,我就可以指定匹配table中是否包含我想要的text。
这个方法是目前我使用过程中感觉最稳定也最方便的,click和Keys.ENTER效果是一样的,但是一样的效果却不用写多余的代码,使用最原始的d.find_element_by_xpath()即可。
d.find_element_by_xpath(‘.........’).send_keys(Keys.ENTER)
1
此文章自用,如有相同内容请谅解