candylihl

自动化元素定位方法及经验总结

1.contains(a, b)

xpath中提供了三个非常好的方法来为我们定位部分属性值
1-1.contains(a, b) 如果a中含有字符串b,则返回true,否则返回false
1-2.starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false
1-3.ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

2.last()

如果可以发现一个规律,虽然这个div是变动的,但它始终位于最后一个节点巧妙的引入,last()函数
/html/body/div[6]/div[1]/div[1]/ul/li
/html/body/div[7]/div[1]/div[1]/ul/li
/html/body/div[8]/div[1]/div[1]/ul/li
整个xpath的写法变为:/html/body/div[last()]/div[1]/div[1]/ul/li

3.WebDriverWait.until

WebDriverWait是一个显性等待机制,等待某个元素满足一定条件后才进行操作,写法如下:
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver,20).until(EC.visibility_of_any_elements_located((By.XPATH,"//div[@id='resultList']/div/div[2]/button")))
expected_conditions类提供的预期条件判断的方法如下:
image

4.通过父级元素定位

例子:多个attr-id=851002的元素,但是父级id='prod_4'是唯一的,可用下面的方法省略中间过程
eleNum=driver.find_element_by_xpath("//[@id='prod_4']///div[contains(@attr-id, 851002)]/input")

5.获取当前时间

currenttime=get_driver().execute_script('var myDate = new Date(); var timeStr = myDate.getFullYear()+""+myDate.getMonth()+""+myDate.getDate()+""+myDate.getHours()+""+myDate.getMinutes()+""+myDate.getSeconds(); return timeStr;');

6.通过弟弟找到哥哥

例子:某个元素属性会一直变动,但是同级的元素固定(弟元素),可先找到弟元素,再找到同级的哥元素
//[@data-assist="edOrder"]//[@id='rowclick']/div/a[contains(text(),'昆明')]/../label/input

7.for循环语句(注意elements的s)

ele1=driver.find_elements_by_xpath("//*[@id='catalogTab']/div/div/a/i")
for i in ele1:
i.click()
sleep(4)

8.获取标签属性值get_attribute

flag=driver.find_element_by_xpath("//*[@id='accNumDiv']/div/div/input").get_attribute('value')

9.click点击无效时可换成js方式

ele = driver.find_element_by_xpath("//div[@id='prod_1']//div[@id='toolsNew']")
driver.execute_script("arguments[0].click();",ele)

10.如何退出iframe去定位iframe外的元素

driver.switch_to.default_content()

11.判断元素列表的个数

elements=driver.find_elements_by_xpath("//*[@id='doIt']/a")
number=str(len(elements))

12.截取文字

flag=driver.find_element_by_xpath("//*[@id='chargeItem']/div[contains(@id,'有线宽带')]").get_attribute('id')
kdacc=flag[5:17]

13.判断是否被选中is_selected

if Element(loc="//[@id='c_custOrderNbr']",l_type="XPATH").is_selected():
logging.info("流水号已被勾选")
else:
driver.find_element_by_xpath("//
[@id='c_custOrderNbr']").click()

14.判断是否出现某个元素is_display

if Element(loc="//*[@id='channelDiv']/a",l_type="XPATH").is_display():
logging.info("渠道选择出现")
else:
logging.info("未出现渠道选择")

15.selenium实现点击空白区域方法

空白区域对应selenium来说没法操作,可以点击一个没有连接的静态图片或者文字,也是一样的效果.

posted on 2024-07-29 14:34  栗子IT小站  阅读(8)  评论(0编辑  收藏  举报

导航