Selenium面试问题和答案-4

1. 什么是页面加载超时

 

Selenium中有一个 Page Load wait的方法,有时候,我们执行脚本的速度太快,但是网页程序还有一部分页面没有完全加载出来,就会遇到元素不可见或者元素找不到的异常。为了解决问题,让脚本流畅的运行,我们可以通过设置页面加载超时时间。具体代码是这个:driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);

 

这行作用就是,如果页面加载超过10秒还没有完成,就抛出页面加载超时的异常。

 

2.什么是JavaScript Executor,你什么时候会用到这个?

 

JavaScript Executor是一个接口,给driver对象提供一个执行javaScript并访问和修改前端元素属性和值。

 

还是有比较多的场景,我们可能或者需要借助javaScript来实现:

1.元素通过现有定位表达式不能够实现点击

2.前端页面试用了ck-editor这个插件

3.处理时间日期插件(可能)

4.生成一个alert弹窗

5.拖拽滚动条

 

基本语法:

JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript(Script,Arguments);

 

相关具体例子:http://blog.csdn.net/u011541946/article/details/73751252

http://blog.csdn.net/u011541946/article/details/73656609

 

3.Selenium中如何实现截图,如何实现用例执行失败才截图

 

Selenium中提供了一个TakeScreenShot这么一个接口,这个接口提供了一个getScreenshotAs()方法可以实现全屏截图。然后我们通过java中的FileUtils来实现把这个截图拷贝到保存截图的路径。

 

代码举例:

File src=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
//
拷贝到我们实际保存图片的路径

FileUtils.copyFile(src,new File("C:/selenium/error.png"));
}
catch (IOException e)
{
System.out.println(e.getMessage());
}

 

      如果要实现执行用例发现失败就自动截图,那么我们需要把这个截图方法进行封装。然后在测试代码中的catch代码块去调用这个截图方法。这个我们在POM的框架中一般是把截图方法封装到BasePage这个文件中。

 

 

4.Selenium中如何实现拖拽滚动条?

 

      在Selenium中通过元素定位会自动帮你拖拽到对应位置,所以是没有自带的scoll方法。但是这个是有限制,例如当前页面高度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会报元素不可见的异常。我们就需要利用javaScript来实现拖拽页面滚动条。

 

我们一般可以两个方法去拖拽,一个是根据拖拽的坐标(像素单位),另外一个是根据拖拽到一个参考元素附件。

 

代码举例(根据元素坐标拖拽):

JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");

 

相关拖拽文章:http://blog.csdn.net/u011541946/article/details/73656609

 

5.如何实现文件上传?

 

我们在web页面实现文件上传过程中,可以直接把文件在磁盘完整路径,通过sendKeys方法实现上传。如果这种方法不能实现上传,我们就可能需要借助第三方工具,我用过一个第三方工具叫autoIT.

 

参考博客文章:http://blog.csdn.net/u011541946/article/details/74359517

还有一个方法是利用robot类:

http://blog.csdn.net/u011541946/article/details/74332938

 

 

6.如何处理“不受信任的证书”的问题?

 

例如,在登录12306网站的时候,如果你没有下载和安装过这个网站的根证书,那么你就会遇到打开12306网站提示证书不受信任的拦截页面。

 

下面举例火狐和谷歌上处理这个问题的基本代码

 

火狐:

// 创建firefoxprofile
FirefoxProfile profile=new FirefoxProfile();
//
点击继续浏览不安全的网站
profile.setAcceptUntrustedCertificates(true);
//
使用带条件的profile去创建一个driver对象
WebDriver driver=new FirefoxDriver(profile);

 

 

Chrome:

// 创建类DesiredCapabilities的对象
DesiredCapabilities cap=DesiredCapabilities.chrome();
//
设置ACCEPT_SSL_CERTS 变量值为true
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
//
新建一个带capabilitychromedriver对象
WebDriver driver=new ChromeDriver(cap);

 

相关博客文章:http://blog.csdn.net/u011541946/article/details/74013466

 

7.什么是Firefox Profile?

 

Profile是一组文件,主要用来记录用户在火狐浏览器上的私人信息,例如书签,密码,用户首选项,下载文件夹保存路径等。简单来说,你打开火狐浏览器输入about://config,这个页面有些设置选项是可以通过profile来实现修改的。

 

在我博客中BrowserEngine.java中,就有profile的简单使用,主要是用来设置下载文件的保存路径。http://blog.csdn.net/u011541946/article/details/76598441

 

8.如何实现鼠标悬停,键盘事件和拖拽动作?

 

Webdriver中,处理键盘事件和鼠标事件,一般使用Actions类提供的方法,包括鼠标悬停,拖拽和组合键输入。

 

这里介绍几个方法

 

方法:clickAndHold()

使用场景:找到一个元素,点击鼠标左键,不放手。自己可以点击鼠标不松开试试这个场景。

 

方法:contentClick()

使用场景:模拟鼠标右键点击,一般右键会带出菜单来。

 

方法:doubelClick()

使用场景:模拟鼠标双击

 

方法:dragAndDrop(source,target)

使用场景:模拟从source这个位置,拖拽一个元素到target位置

 

键盘事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)

使用场景:点击键盘事件,分为两个动作,一个点击键盘,第二个动作是释放点击(松开)

 

相关博客文章:http://blog.csdn.net/u011541946/article/details/74043595

 

 

  • 3
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值