GUI测试问题汇总
1.ajax实现的页面元素定位问题
最近在做项目的时候遇到一个问题,通过xpath定位到元素后做一个循环操作,第一循环可以正常执行,第二次循环后就报错,错误信息:Message: The element reference of <button class="btn btn-info"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed,怎么看xpath都没问题啊,搞了很久才发现页面我定位的那个元素在页面部分是通过ajax实现的,也就是说我的第一次循环后页面做了刷新,没有对元素进行重新定位就进入了第二次循环,因此会报这样的错误。
paths = ['//*[@id="mornExam-table"]/tbody/tr[1]/td[8]/button', '//*[@id="mornExam-table"]/tbody/tr[2]/td[8]/button', '//*[@id="mornExam-table"]/tbody/tr[3]/td[8]/button', '//*[@id="mornExam-table"]/tbody/tr[4]/td[8]/button']
#循环前定位 btn0 = dr.find_element_by_xpath(paths[0]) btn1 = dr.find_element_by_xpath(paths[1]) btn2 = dr.find_element_by_xpath(paths[2]) btn3 = dr.find_element_by_xpath(paths[3]) btns = [btn0, btn1, btn2, btn3] #循环测试数据 for j in range(0,len(flag)): try: btns[j] = dr.find_element_by_xpath(paths[j]) #第j次点第j个晨考按钮 btns[j].click()
........
2.定位元素
使用xpath定位元素的时候,写成相对路径,遇到问题如下:
似乎是相对路径的时候无法找到父元素,换成绝对路径解决。
定位元素能使用id和name最好,使用xpath定位是下下选,因为一旦页面做了改变都会影响到定位,使用xpath也尽量通过目标元素的上级元素中的id货name、class定位后再往下找路径。
3.下拉菜单
通过selenium的Select类库中提供的方法来操作下拉菜单
import selenium.webdriver.suurport.ui import Select
#生成选择器
selector = Select(driver.find_element_by_id('name'))
设值四种方法
1.selector.select_by_vlaue('WNCD005')
2. selector.select_by_index(0)
3. selector.select_by_visible_text(李懿)
4.selector.find_element_by_tag_name('options')[0].click
4.操作table中的元素
假如要获取table中第二列的值,依次做如下操作:
1.定位table
table = dr.find_element_by_xpath('//*[@id="leave-table"]')
2.所有行
rows = table.find_elements_by_tag_name('tr')
3.循环行
for i in range(0,len(rows))
#获取所有列
cols = rows[i].find_element_by_tag_name('td')
#取出第二列的值
value = cols[1].text