开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第一天,点击查看活动详情
在自动化中UI自动化是自动化测试中不可分割的一部分,也是黑盒测试的测试的一个重要手段。我今天简单的讲讲ui自动化的一些问题,希望可以帮到大家。
一、在启动浏览器时会报错
**报错信息:** Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'
出现以上报错信息,是由于浏览器版本与driver版本不匹配,在进行UI测试之前,一定要先检查自己浏览器的版本,然后找到对应版本的driver,这样才能正常启动浏览器进行测试。
二、无匹配元素/元素不可见
例如,报错信息为:ValueError: Element locator 'id=msgCount' did not match any elements.
首先,确认是否设置了合理的等待时间,在web的UI测试过程中,我们需要等待元素加载完成之后,才可以定位到对应的元素;其次,如果设置等待时间仍然无法解决问题,再检查定位方式是否准确,并切换不同的方式进行元素定位,常用的元素定位方法包括id、name、className、partialLinkText()、linkText、xpath、cssSelector();一般情况下,出现无法定位或者找不到元素的情况,都是由于没有设置合理的等待时间。
三、切换浏览器窗口
在进行UI自动化测试过程中,我们通过链接打开一个新的页面时,需要进行窗口切换,才能在新页面进行操作,代码如下:
//操作新窗口中的新页面,获取新窗口的句柄!!!
String winHandleBefore 2 = driver.getwindowHandle();
for (String winHandle : driver.getwindowHandles())
{
if( winHandle.equals(winHandleBefore 2))
{
continue;
}
driver.switchTo().window(winHandle);
break;
}
其中,driver.getWindowHandle();获取当前窗口句柄(系统分配的唯一标识,跟身份证一样) driver.getWindowHandles();获取当前浏览器所有窗口的句柄集 此外,获取当前浏览所有窗口的句柄集,相当于一个列表,也可以通过如下代码来切换到最新打开的页面:
new_handle=driver.getWindowHandles()[-1];
driver.swicth_To().window(new_handle);
四、定位
Webdriver定位class属性中有空格的值
例如:定位" class="bg s_btn",一共有三种处理方式:
self.browser.find_element_by_class_name("s_btn").submit() #第一种解决办法:class值取其中之一
self.browser.find_element_by_class_name("bg").submit() #第二种解决办法:class值取其中之一
self.browser.find_element_by_css_selector(".bg.s_btn").submit() #第三种解决办法:使用css.selector,每个class值前面加.
其中,在使用前两种方法的时候,需要确认我们选取的元素不会在该页面上存在重复,因此建议使用css.selector方式进行定位,以保证元素查找的唯一性。
**五、处理图片验证码
在进行登录注册等操作时,我们经常需要处理一些验证码;除了通过万能码进行登录之外,我们还可以调用百度提供的开放接口进行验证码处理,接口说明文档如下: ai.baidu.com/docs#/OCR-A…