selenium+java如何进行Q三方登录(续坑)

总结:
所用到的方法
(1)切换窗口
(2)切换frame
(3)id,class

个人背景:完全零基础,各方面都有点弱(html,java等)

测试环境:chrome+java+selenium

测试用例:百度网盘用第三方授权–QQ进行登录
测试步骤:

  1. 进入网页()
  2. 点击QQ图标,弹出QQ登录窗口
  3. 点击窗口内,左下方的帐号密码登录,出现帐号密码登录框
  4. 输入帐号和密码,点击授权并登录

    以下是QQ快速登录的解决问题方法,基本一样,不再另外修改

如图:
这里写图片描述
遇到问题:
1、如何切换到这个窗口进行自动化操作?
解决方法:
百度了一大片,作为新手来说,目前只看到一点,要切换窗口
用了全部通用的代码

String currentWindow=driver.getWindowHandle();
        String preWindowString = currentWindow;
        Set<String> handles=driver.getWindowHandles();
        Iterator<String> it=handles.iterator();
        while(it.hasNext()){
            if(currentWindow==it.next()) continue;
             window= driver.switchTo().window(it.next());
        }

当然,别忘了测试完成后,切回来,这点很重要。

driver.switchTo().window(preWindowString);

找到这个之后,
问题2,那么怎么判断,我切窗口成功了呢?
解决方法:定位一个窗口上的元素,判断它是否存在。
这里写图片描述
(1)判断右侧文字是否存在
先在firefox 用FirePath工具,定位元素一下,看一下属性
这里写图片描述

System.out.println(driver.findElement(By.xpath(".//*[@id='lay_main']")).isDisplayed());

给日志,看是否可以打印出true,如果成功打印,表明成功定位到窗口
(2)当然也可以,获取当前窗口的名称,看是否是第二个窗口的名称

问题3,到此时,左侧的登录还是不能定位到里面的元素,怎么办?
(1)自己使用FirePath工具,到处定位,XPath属性,CSS属性,以及其他,完全都不能定位到。
怎么办?怎么办?
这里写图片描述

这时,发现可以定位到整体
有个url这里写链接内容

另外新建一个页面,测试定位到页面的元素是否成功

     WebElement qloginList=driver.findElement(By.id("qlogin_list"));

    List<WebElement> ql=qloginList.findElements(By.className("face"));
    ql.get(1).click();

成功定位到元素

把这些都集合到整个流程中,还是不行,感觉脑袋有坑,对于菜鸟来说,完全是折磨,
去QQ群里问了,还是回复上面的切换窗口,怎么办呢?
出门抽口烟,抬头望望天。
回来了,继续死磕。
猛然发现,我刚刚另外摘出的链接前方是iframe

立马百度,selenium iframe
茅塞顿开!!!
需要切换frame!!

driver.switchTo().frame(0);

加这么一句代码,试着运行了一下,成功了!!!
我的目的实现了。

天空都蓝了,周围都安静了,内心喜!

感想:
定位元素时,如果定位单个元素,直接定位不到,先看整体模块属性。整体属性,一定要仔细看,不能马虎。再一层层往下定位。
过程中,分析问题,需要再每句定位代码前方,加log判断是否运行。
进入一个坑后,会进行死循环,找朋友说明一下你的问题,顺一下思路,你也能发现自己问题所在。

以上,来自一个坑货新手。

猜你喜欢

转载自blog.csdn.net/qq_21102235/article/details/72731604