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

 

posted @ 2018-07-27 23:29  fr_up  Views(522)  Comments(0)    收藏  举报