求selenium java面试题的面试题

1、selenium中如何判断元素是否存在?
- isElementPresent
2、selenium中hidden或者是display = none的元素是否可以定位到?
3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
- 添加元素智能等待时间 driver.implicitly_wait(30)
- try 方式进行&id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种
-Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测 试不是只有测试人员保证的。需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,这样就能大大地提高元素定位的准确性。当然如果开发人员 开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证我的每一个操作符合我的预 期
4、如何提高selenium脚本的执行速度?
-&Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。
我们可以从以下几个方面来提高速度:
一,减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
二,中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。
四,配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。
5、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
- time.sleep( )
-&driver.implicitly_wait(30)
- 多用 try 捕捉,处理异常
-此时我们要分析出不稳定的原因,然后有针对性的去解决问题。主要有以下几个方面 :一,网速问题:有的时候网页加载的比较慢,在程序
执行的时候要操作的元素没有显示出来。这种情况比较常见,运行一次网速好的时候通过了,再运行一次,页面没有打开,就不通过了。为了提高稳定性,我们只能
牺牲运行时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执行下面的操作。二,Selelnium的原因:Selenium1.0和2.0还是有区别的,有些儿函数在2.0下运行确实有时而有效,时面无效。如果mouseover()函数,就是这种情况, 我们需要避免使用这类的函数。三,
多线程的时候,测试用例间相互影响。虽然多线程的时候运行速度比较快,但是如果用例之间的耦合性没有设计好,也会影响的,如果用例A先于用例B执行的时
候,就会影响到用例B;反之则没有问题。这种情况,如果你的自动化测试工程打算多线程的时候,提前就要把测试用例测试的耦合度比较松,尽量没有任何关系,
因为多线程的执行顺序是不受控制的。
6、你的自动化用例的执行策略是什么?
-&自动化测试用例的执行策略是要看自动化测试的目的,通常有如下几种策略:一,自动化测试用例是用来监控的,在此目的下,我们就把自动化测试用例设置成定时执行的,如果每五分钟或是一个小时执行一次,在jenkins上创建一个定时任务即可。二,
必须回归的用例。有些儿测试用例,如BVT测试用例,我们在公司产品任何变动上线之前都需要回归执行。那我们就把测试用例设置成触发式执行,在
jenkins上将我们的自动化测试任务绑定到开发的build任务上。当开发人员在仿真环境上部代码的时候,我们的自动化测试用例就会被触发执行。三,不需要经常执行的测试用例。像全量测试用例,我们没有必要一直回归执行,必竟还是有时间消耗的,有些非主要业务线也不需要时时回归。这类测试用例我们就采用人工执行,在jenkins创建一个任务,需要执行的时候人工去构建即可。
7、什么是持续集成?
-&持续集成源于极限编程(XP),
是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成
讲的是不断的去做软件的集成工作。持续集成,最简单的形式是包括一个监控版本控制(SVN等等)变化的工具。当变化被发觉时,这个工具可以自动的编译并测
试你的应用。
8、自动化测试的时候是不是需要连接数据库做数据校验?
- UI自动化不需要
- 接口测试会需要
9、id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?
- css 、xpath 几乎所有的元素都可以定位到
10、如何去定位页面上动态加载的元素?
-&触发动态加载元素的事件,直至动态元素出现,进行定位
11、如何去定位属性动态变化的元素?
- xpath或者css通过同级、父级、子级进行定位
12、点击链接以后,selenium是否会自动等待该页面加载完毕?
13、webdriver client的原理是什么?
- [Webdriver实现原理](/timsheng/archive//2546957.html)
通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriver&ruby binding的firefox-webdriver实现为例,简单介绍一下webdriver的工作原理。
当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox;
firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在;
客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response;
客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;
这就是webdriver的工作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。
webdriver是按照server & client的经典设计模式设计的。
server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;
client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被
测试浏览器,也就是remote server;remote
server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;
14、webdriver的协议是什么?
-The WebDriver Wire Protocol
15、启动浏览器的时候用到的是哪个webdriver协议?
16、什么是page object设计模式?
-/tsbc/p/4080301.html
&相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id
查找,需要对每个用例脚本都要改,虽然几个用例看不出什么工作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发生
了改变,我们就得贯穿整个测试代码进行调整元素定位,这样就会导致我们的脚本在后期,难以维护。因此通过Page Object Model
我们可以创建更加健壮代码,并减少或者消除重复的测试代码,从而也能够提高代码的可读性,减少编写脚本的工作量。Page Object
Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。
17、什么是page factory设计模式?
-&/pageobjects-and-pagefactory-design-patterns-in-selenium/
18、怎样去选择一个下拉框中的value=xx的option?
19、如何在定位元素后高亮元素(以调试为目的)?
-重置元素属性,给定位的元素加背景、边框
20、什么是断言?
-断言的英文是assertion,断言检查的英文是assertion checking。
-断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。
21、如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?
-使用自己熟悉的语言
22、page object设置模式中,是否需要在page里定位的方法中加上断言?
23、page object设计模式中,如何实现页面的跳转?
-get、click (可能有坑)
24、自动化测试用例从哪里来?
-手工用例中抽取
-可以参考自动化用例的执行策略
25、你觉得自动化测试最大的缺陷是什么?
-成本与收益
26、什么是分层测试?
-[分层自动化](/fnng/p/3653793.html?utm_source=tuicool&utm_medium=referral)
还是自己理解吧
27、webdriver可以用来做接口测试吗?
-有难度,不推荐
28、get和post 的区别?(感觉可能答案不对)
-因为使用GET请求不会产生什么动作。不会产生动作意味着GET的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产
生,这里的安全方法仅仅指不会修改信息。POST可能会修改服务器上的资源的请求。比如CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过
POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了。
两种请求方式的区别:
1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
2、传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
POST的安全性比GET的高
29、公司内一直在使用的测试系统(B/S架构)突然不能访问了,需要你进行排查并恢复,说出你的检查方法
答:一、网站输入域名直接无法访问,网站之前还正常,突然就无法访问
1. 测试FTP是否正常可以登录,不能登录的直接问空间商那是空间商的问题直接联系他们。2. 空间赠送的三级域名是否能够访问网站打开网站(空间都赠送三级域名),如果也不能访问应该是空间问题。3. 在电脑的开始菜单运行中输入cmd,在弹出的黑框中输入:ping 你的域名;然后回车,如果看不到IP或IP地址与你的主机地址不符,则说明域名解析有误,是域名的问题得重新解析域名。二、访问报404错误(无法找到该页)。说明是网站内容都正常是程序出现问题,看看程序是否完整。三、访问网站出现MySQL Server Error 这个是数据库链接错误,查看数据库连接文件和数据库是不是错误。四、访问网站出现500错误。1. 请登录FTP查看是否多了异常文件或丢失文件,说明网站被侵入了,马上联系网站制作进行进行排查故障。2. 如果空间且FTP程序目录没有缺失文件或刚刚安装就出现500错误,请确认空间已开启scandir()函数,查看是不是禁止了这个函数。
阅读(...) 评论()selenium中如何判断元素是否存在?
selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断。
selenium中hidden或者是display = none的元素是否可以定位到?
不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。
selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点;
被点击的元素不能被其他元素遮挡;
被点击的元素不能在viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见;
使用element.is_enabled()(python代码)判断元素是否是可以被点击的,如果返回false证明元素可能灰化了,这时候就不能点;
如何提高selenium脚本的执行速度?
使用效率更高的语言,比如java执行速度就快过python
不要盲目的加sleep,尽量使用
对于firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题
chrome浏览器和safari浏览器的执行速度看上去是最快的
可以考虑分布式执行或者使用selenium grid
用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
测试专属profile,尽量让静态资源缓存
尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰
你的自动化用例的执行策略是什么?
每日执行:比如每天晚上在主干执行一次
周期执行:每隔2小时在开发分之执行一次
动态执行:每次代码有提交就执行
自动化测试的时候是不是需要连接数据库做数据校验?
一般不需要,因为这是单元测试层做的事情,在自动化测试层尽量不要为单元测试层没做的工作还债。
id,name,clas,xpath, css selector这些属性,你最偏爱哪一种,为什么?
xpath和css最为灵活,所以其他的答案都不够完美。
如何去定位页面上动态加载的元素?
如何去定位属性动态变化的元素?
找出属性动态变化的规律,然后根据上下文生成动态属性。
点击链接以后,selenium是否会自动等待该页面加载完毕?
java binding在点击链接后会自动等待页面加载完毕。
selenium的原理是什么?
selenium的原理涉及到3个部分,分别是
driver: 一般我们都会下载driver
client: 也就是我们写的代码
client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client。这就是selenium工作的大致原理。
webdriver的协议是什么?
client与driver之间的约定,无论client是使用java实现还是c#实现,只要通过这个约定,client就可以准确的告诉drier它要做什么以及怎么做。
webdriver协议本身是http协议,数据传输使用json。
有webdriver协议的所有endpoint,稍微看一眼就知道这些endpoints涵盖了selenium的所有功能。
启动浏览器的时候用到的是哪个webdriver协议?
,如果创建成功,返回sessionId和。
什么是page object设计模式?
,简单来说就是用class去表示被测页面。在class中定义页面上的元素和一些该页面上专属的方法。
public class LoginPage {
private final WebD
public LoginPage(WebDriver driver) {
this.driver =
什么是page factory?
实际上是官方给出的java page object的工厂模式实现。
怎样去选择一个下拉框中的value=xx的option?
使用select类,具体看
如何在定位元素后高亮元素(以调试为目的)?
使用javascript将元素的border或者背景改成黄色就可以了。
什么是断言?
可以简单理解为检查点,就是预期和实际的比较
如果预期等于实际,断言通过,测试报告上记录pass
如果预期不等于实际,断言失败,测试报告上记录fail
如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?
哪个熟悉用哪个
如果都不会,团队用哪种语言就用那种
page object设置模式中,是否需要在page里定位的方法中加上断言?
一般不要,除非是要判断页面是否正确加载。
Generally don’t make assertions
page object设计模式中,如何实现页面的跳转?
返回另一个页面的实例可以代表页面跳转。
自动化测试用例从哪里来?
手工用例的子集,尽量
简单而且需要反复回归
稳定,也就是不要经常变来变去
核心,优先覆盖核心功能
你觉得自动化测试最大的缺陷是什么?
实现成本高
运行速度较慢
需要一定的代码能力才能及时维护
什么是分层测试?
画给他/她看。
webdriver可以用来做接口测试吗?
不用纠结,不可以。
selenium 是否可以调用js来对dom对象进行操作?
Could selenium call js for implementation dom object directly?
selenium 是否可以向页面发送鼠标滚轮操作?
Could selenium send the action of mouse scroll wheel?
selenium 是否可以模拟拖拽操作?
Does selenium support drag and drop action?
selenium 对下拉列表的中的选项进行选择操作时,需要被操作对象的标签是什么?
When Selenium selects the option in selenium, What tag the DOM object should be?
selenium 上传文件操作,需要被操作对象的type属性是什么?
When Selenium upload a file, what value of type of the DOM object should be?
阅读(...) 评论()2786人阅读
自动化(1)
今天有同学问到seleinum面试的时候会问到的问题,随便想了想,暂时纪录一下。欢迎大家在评论中提供更多问题。回复是我自己的答案,如果大家有什么好的看法,可以留言交流
selenium中如何判断元素是否存在?
selenium中hidden或者是display = none的元素是否可以定位到?
selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
答:Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的。需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,这样就能大大地提高元素定位的准确性。当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证我的每一个操作符合我的预期。
如何提高selenium脚本的执行速度?
答:Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。
我们可以从以下几个方面来提高速度:
一,减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
二,中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。
四,配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。
用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
答:此时我们要分析出不稳定的原因,然后有针对性的去解决问题。主要有以下几个方面 :
一,网速问题:有的时候网页加载的比较慢,在程序执行的时候要操作的元素没有显示出来。这种情况比较常见,运行一次网速好的时候通过了,再运行一次,页面没有打开,就不通过了。为了提高稳定性,我们只能牺牲运行时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执行下面的操作。
二,Selelnium的原因:Selenium1.0和2.0还是有区别的,有些儿函数在2.0下运行确实有时而有效,时面无效。如果mouseover()函数,就是这种情况, 我们需要避免使用这类的函数。
三,多线程的时候,测试用例间相互影响。虽然多线程的时候运行速度比较快,但是如果用例之间的耦合性没有设计好,也会影响的,如果用例A先于用例B执行的时候,就会影响到用例B;反之则没有问题。这种情况,如果你的自动化测试工程打算多线程的时候,提前就要把测试用例测试的耦合度比较松,尽量没有任何关系,因为多线程的执行顺序是不受控制的。
你的自动化用例的执行策略是什么?
答:自动化测试用例的执行策略是要看自动化测试的目的,通常有如下几种策略:
一,自动化测试用例是用来监控的,在此目的下,我们就把自动化测试用例设置成定时执行的,如果每五分钟或是一个小时执行一次,在jenkins上创建一个定时任务即可。
二,必须回归的用例。有些儿测试用例,如BVT测试用例,我们在公司产品任何变动上线之前都需要回归执行。那我们就把测试用例设置成触发式执行,在jenkins上将我们的自动化测试任务绑定到开发的build任务上。当开发人员在仿真环境上部代码的时候,我们的自动化测试用例就会被触发执行。
三,不需要经常执行的测试用例。像全量测试用例,我们没有必要一直回归执行,必竟还是有时间消耗的,有些非主要业务线也不需要时时回归。这类测试用例我们就采用人工执行,在jenkins创建一个任务,需要执行的时候人工去构建即可。
什么是持续集成?
自动化测试的时候是不是需要连接数据库做数据校验?
id,name,clas,x path, css selector这些属性,你最偏爱哪一种,为什么?
如何去定位页面上动态加载的元素?
如何去定位属性动态变化的元素?
点击链接以后,selenium是否会自动等待该页面加载完毕?
webdriver client的原理是什么?
webdriver的协议是什么?
启动浏览器的时候用到的是哪个webdriver协议?
什么是page object设计模式?
什么是page factory设计模式?
怎样去选择一个下拉框中的value=xx的option?
如何在定位元素后高亮元素(以调试为目的)?
什么是断言?
如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?
page object设置模式中,是否需要在page里定位的方法中加上断言?
page object设计模式中,如何实现页面的跳转?
自动化测试用例从哪里来?
你觉得自动化测试最大的缺陷是什么?
什么是分层测试?
webdriver可以用来做接口测试吗?
一、 UI自动化测试
1、 Qunar机票搜索场景
1) 访问Qunar机票首页,选择“单程”,输入出发、到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索列表页。
2) 在列表页停留1分钟,至到页面上出现“搜索结束”。
3) 如果出现航班列表,对于出现“每段航班均需缴纳税费”的行随机点选“订票”按钮,在展开的列表中会出现“第一程”、 “第二程”;对于没有出现“每段航班均需缴纳税费”的行随机点选“订票”按钮,在展开的列表底部中会出现“报价范围”
4) 如果不出现航班列表,则页面会出现“该航线当前无可售航班”
2、 请使用maven创建java工程,引入Selenium框架,编写WebUI代码,实现上述人工操作和验证。要求能随机验证100个城市对的3个月内的任意搜索条件。
很多人可能第一步就卡住了,怎么选择7天以后的日期呢?
实际上很简单,直接在输入框里输入就好了。因为selenium支持的语言很多,这里就用js写一下。大家用selenium执行这段js就可以搞定了。
var date = new Date();
date.setDate(date.getDate() + 7);
var a_week_later = date.getFullYear() + '-' (date.getMonth()+1) + '-' + date.getDate();
$('input[name=fromDate]').val(a_week_later);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8354次
排名:千里之外
转载:17篇
(1)(1)(1)(1)(3)(2)(3)(2)(10)(1)关注51Testing
那些年在Selenium中踩过的坑
发表于: 11:02 &作者:明慢慢 & 来源:51Testing软件测试网采编
推荐标签:
  1.selenium 在打开firefox后,发现程序‘死’那里了,不动了,后面的代码不执行,最后抛出异常说超时。  原因:这个主要原因selenium在运行时会在firefox中安装一个Firefox WebDriver的插件,如果firefox版本太高,比如最新的FF48版本,在48版本中,对于安装的插件要进行验证,没有经过验证的插件不会被运行,而且通过在firefox中输入about:config,设置xpinstall.signatures.required为true,同样也无法生效。  解决方案:很简单,用低版本的firefox把,比如firefox45,当然也请跟踪selenium的开发进度,目前正有个geckodriver的新版本开发过程中,不过当前这个时间点最好的办法是降低你的firefox版本。目前为止47.01是可以用的。  (请注意,本条时间为)  上代码便于说清楚,以下代码是正确无任何问题#coding=utf-8#运行环境配置#主要配置firefox的profile文件是否可用import osimport sysfrom selenium import webdrivermon.exceptions & &import NoSuchElementExceptiongourl='/'#获得webdriver函数def get_webdriver():#定制firefox的profile文件profileDir = r"d:\xiaoshuo\profile"profile1 = webdriver.FirefoxProfile(profileDir)#亲们重点关注这句就好,其他更多的不用关心br=webdriver.Firefox(profile1)br.set_window_size(600,600)return brbr=get_webdriver()br.get(gourl)  2.在使用find_element_by_xxxx()查找元素时,如果元素找不到,不会返回None,而是抛出异常,你必须得自己捕获异常from selenium import webdrivermon.exceptions & &import NoSuchElementExceptionbr=webdriver.Firefox()gourl='/'br.get(gourl)try:xiaoyiye=br.find_element_by_link_text(u'下一页')#找到要做的事情except NoSuchElementException:#找不到异常处理print "no next page"  3.selenium启动firefox,如果不指定profile文件,将只能使用firefox默认配置,无法进行定制,比如不显示图片,启动广告插件等,你必须得自己配置profile,让selenium用指定配置启动  from selenium import webdriver  mon.exceptions & &import NoSuchElementException  profileDir = r"G:\myproject\python\xiaoshuo\profile"  profile1 = webdriver.FirefoxProfile(profileDir)  time.sleep(1)  br=webdriver.Firefox(profile1)  gourl=''  br.get(gourl)  4.在使用firefox的 profile文件后,你会发现很多选项虽然在浏览器中进行了设置但是在通过selenium启动firefox的时候很多设置没有生效,所以你还得必须会通过代码进行配置设置来关闭图片  profileDir = r"G:\myproject\python\xiaoshuo\profile"  profile1 = webdriver.FirefoxProfile(profileDir)  profile1.set_preference('permissions.default.stylesheet', 2)  profile1.set_preference('permissions.default.image', 2)  profile1.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')  br=webdriver.Firefox(profile1)  gourl='http://www.duzheba.cc/'  br.get(gourl)  5. 用标签页代替弹出窗口无法设置成功  在使用selenium来操控firefox的时候,有时候希望所有的新开窗口用TabPage来代替,但是如果你以为通过设置firefox的profile文件目录,或者在代码中通过profile1.set_preference('browser.link.open_newwindow',3)来搞定,那么你会发现你启动的窗口永远browser.link.open_newwindow的值永远等于2,也就是下图中的“需要新建窗口时以新建标签页代替”选项永远是没有选中的,除非手动点击一下。  标签页选项  原因很简单,因为selenium的绑定中已经将这个选项写成了固定值,所以无论你如何设定除非在窗口启动后手动点击,否则该项用户按不会选中。而该问题的解决在于直接手动改写selenium代码中的设置,具体方法如下:  确定目录,在我的机器上是C:\Python27\Lib\site-packages\selenium\webdriver\firefox,大家可以根据自己的机器情况进行调整  编辑器打开目录中的webdriver_prefs.json文件,将browser.link.open_newwindow的值修改为3。
搜索风云榜
51Testing官方微信
51Testing官方微博
测试知识全知道

我要回帖

更多关于 selenium面试题及答案 的文章

 

随机推荐