涵灵 发表于 2015-10-8 17:19:05

Selenium2测试单点登陆的系统

使用selenium2进行自动化测试,登陆进去后,无法定位页面元素。

被测系统是单点登陆系统,被测功能不是单点所在服务器功能。
使用driver.pageSource();可以打印出页面信息。
但是,使用:driver.findElement()找不到元素。

有没有大神遇到过类似的情况?如何解决?

jingzizx 发表于 2015-10-9 09:37:55

再试试其他定位元素方式

xieyouying 发表于 2015-10-9 15:05:16

应该是跳转新的页面,然后selenium找不到元素了,可以根据句柄来切换页面,然后再操作
下面是代码
0.获取当前页面的句柄值
m0= driver.window_current_handle
1.点击链接后,打开新页面(假设是打开新的标签页)
2.等待新页面加载完成(新handle生成后)
while True:
    m = driver.window_handles
    if len(m)>1:
      break
判断句柄数量,如果大于1,表示新页面加载完成
3.获取所有的页面句柄
m = driver.window_handles
4.获取新页面句柄
for x in m:
if x != m0:
        handle_new = x
5.跳转新页面
driver.switch_to_window(handle_new)

涵灵 发表于 2015-10-10 09:15:17

xieyouying 发表于 2015-10-9 15:05
应该是跳转新的页面,然后selenium找不到元素了,可以根据句柄来切换页面,然后再操作
下面是代码
0.获取 ...

是这样的。我们的系统左侧是菜单,右侧才是内容。
单点登陆后,点击A系统菜单,右侧链接到B系统页面。所以句柄一直是一个。

有个一个现象,B系统用JQuery写的,打开的时候,先有屏蔽,显示全了才关掉屏蔽,但是时间很短。
这个会不会有关系呢?但是我设置等待时间,还是不行。

xieyouying 发表于 2015-10-10 15:53:44

涵灵 发表于 2015-10-10 09:15
是这样的。我们的系统左侧是菜单,右侧才是内容。
单点登陆后,点击A系统菜单,右侧链接到B系统页面。所 ...

这样的话,一般这种实现方法都是通过iframe来实现的
可以先把右侧的iframe获取到
例:
e = driver.find_element_by_xpath('/html/body/div/div/div/div/div/iframe')
然后再
driver.switch_to_frame(e)
然后再操作右侧页面中的内容
页: [1]
查看完整版本: Selenium2测试单点登陆的系统