小編給大家分享一下selenium面試題有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、天寧網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為天寧等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
1.selenium中如何判斷元素是否存在?
selenium中沒(méi)有提供原生的方法判斷元素是否存在,一般我們可以通過(guò)定位元素+異常捕獲的方式判斷。
```
# 判斷元素是否存在try:
dr.find_element_by_id('none')except NoSuchElementException:
print 'element does not exist'
```
2.selenium中hidden或者是display = none的元素是否可以定位到?
不可以,selenium不能定位不可見(jiàn)的元素。display=none的元素實(shí)際上是不可見(jiàn)元素。
3.selenium中如何保證操作元素的成功率?也就是說(shuō)如何保證我點(diǎn)擊的元素一定是可以點(diǎn)擊的?
被點(diǎn)擊的元素一定要占一定的空間,因?yàn)閟elenium默認(rèn)會(huì)去點(diǎn)這個(gè)元素的中心點(diǎn),不占空間的元素算不出來(lái)中心點(diǎn);
被點(diǎn)擊的元素不能被其他元素遮擋;
被點(diǎn)擊的元素不能在viewport之外,也就是說(shuō)如果元素必須是可見(jiàn)的或者通過(guò)滾動(dòng)條操作使得元素可見(jiàn);
使用element.is_enabled()(python代碼)判斷元素是否是可以被點(diǎn)擊的,如果返回false證明元素可能灰化了,這時(shí)候就不能點(diǎn);
4.如何提高selenium腳本的執(zhí)行速度?
使用效率更高的語(yǔ)言,比如java執(zhí)行速度就快過(guò)python
不要盲目的加sleep,盡量使用顯示等待
對(duì)于firefox,考慮使用測(cè)試專(zhuān)用的profile,因?yàn)槊看螁?dòng)瀏覽器的時(shí)候firefox會(huì)創(chuàng)建1個(gè)新的profile,對(duì)于這個(gè)新的profile,所有的靜態(tài)資源都是從服務(wù)器直接下載,而不是從緩存里加載,這就導(dǎo)致網(wǎng)絡(luò)不好的時(shí)候用例運(yùn)行速度特別慢的問(wèn)題
chrome瀏覽器和safari瀏覽器的執(zhí)行速度看上去是最快的
可以考慮分布式執(zhí)行或者使用selenium grid
5.用例在運(yùn)行過(guò)程中經(jīng)常會(huì)出現(xiàn)不穩(wěn)定的情況,也就是說(shuō)這次可以通過(guò),下次就沒(méi)辦法通過(guò)了,如何去提升用例的穩(wěn)定性?
測(cè)試專(zhuān)屬profile,盡量讓靜態(tài)資源緩存
盡量使用顯示等待
盡量使用測(cè)試專(zhuān)用環(huán)境,避免其他類(lèi)型的測(cè)試同時(shí)進(jìn)行,對(duì)數(shù)據(jù)造成干擾
6.你的自動(dòng)化用例的執(zhí)行策略是什么?
每日?qǐng)?zhí)行:比如每天晚上在主干執(zhí)行一次
周期執(zhí)行:每隔2小時(shí)在開(kāi)發(fā)分之執(zhí)行一次
動(dòng)態(tài)執(zhí)行:每次代碼有提交就執(zhí)行
7.什么是持續(xù)集成?
可以自行百度,學(xué)習(xí)能力自我提升很重要(1079636098)軟件測(cè)試技術(shù)交流群推薦。
8.自動(dòng)化測(cè)試的時(shí)候是不是需要連接數(shù)據(jù)庫(kù)做數(shù)據(jù)校驗(yàn)?
一般不需要,因?yàn)檫@是單元測(cè)試層做的事情,在自動(dòng)化測(cè)試層盡量不要為單元測(cè)試層沒(méi)做的工作還債。
9.id,name,clas,x path, css selector這些屬性,你最偏愛(ài)哪一種,為什么?
xpath和css最為靈活,所以其他的答案都不夠完美。
10如何去定位頁(yè)面上動(dòng)態(tài)加載的元素?
顯示等待
11.如何去定位屬性動(dòng)態(tài)變化的元素?
找出屬性動(dòng)態(tài)變化的規(guī)律,然后根據(jù)上下文生成動(dòng)態(tài)屬性。
12.點(diǎn)擊鏈接以后,selenium是否會(huì)自動(dòng)等待該頁(yè)面加載完畢?
java binding在點(diǎn)擊鏈接后會(huì)自動(dòng)等待頁(yè)面加載完畢。
13.webdriver client的原理是什么?
selenium的原理涉及到3個(gè)部分,分別是
瀏覽器
driver: 一般我們都會(huì)下載driver
client: 也就是我們寫(xiě)的代碼
client其實(shí)并不知道瀏覽器是怎么工作的,但是driver知道,在selenium啟動(dòng)以后,driver其實(shí)充當(dāng)了服務(wù)器的角色,跟client和瀏覽器通信,client根據(jù)webdriver協(xié)議發(fā)送請(qǐng)求給driver,driver解析請(qǐng)求,并在瀏覽器上執(zhí)行相應(yīng)的操作,并把執(zhí)行結(jié)果返回給client。這就是selenium工作的大致原理。
14.webdriver的協(xié)議是什么?
client與driver之間的約定,無(wú)論client是使用java實(shí)現(xiàn)還是c#實(shí)現(xiàn),只要通過(guò)這個(gè)約定,client就可以準(zhǔn)確的告訴drier它要做什么以及怎么做。
webdriver協(xié)議本身是http協(xié)議,數(shù)據(jù)傳輸使用json。
這里有webdriver協(xié)議的所有endpoint,稍微看一眼就知道這些endpoints涵蓋了selenium的所有功能。
15.啟動(dòng)瀏覽器的時(shí)候用到的是哪個(gè)webdriver協(xié)議?
New Session,如果創(chuàng)建成功,返回sessionId和capabilities。
16.什么是page object設(shè)計(jì)模式?
簡(jiǎn)單來(lái)說(shuō)就是用class去表示被測(cè)頁(yè)面。在class中定義頁(yè)面上的元素和一些該頁(yè)面上專(zhuān)屬的方法。
例子
```
public class LoginPage { private final WebDriver driver; public LoginPage(WebDriver driver) { this.driver = driver; // Check that we're on the right page. if (!"Login".equals(driver.getTitle())) { // Alternatively, we could navigate to the login page, perhaps logging out first throw new IllegalStateException("This is not the login page"); } } // The login page contains several HTML elements that will be represented as WebElements. // The locators for these elements should only be defined once. By usernameLocator = By.id("username"); By passwordLocator = By.id("passwd"); By loginButtonLocator = By.id("login"); // The login page allows the user to type their username into the username field public LoginPage typeUsername(String username) { // This is the only place that "knows" how to enter a username driver.findElement(usernameLocator).sendKeys(username); // Return the current page object as this action doesn't navigate to a page represented by another PageObject return this; } // The login page allows the user to type their password into the password field public LoginPage typePassword(String password) { // This is the only place that "knows" how to enter a password driver.findElement(passwordLocator).sendKeys(password); // Return the current page object as this action doesn't navigate to a page represented by another PageObject return this; } // The login page allows the user to submit the login form public HomePage submitLogin() { // This is the only place that submits the login form and expects the destination to be the home page. // A seperate method should be created for the instance of clicking login whilst expecting a login failure. driver.findElement(loginButtonLocator).submit(); // Return a new page object representing the destination. Should the login page ever // go somewhere else (for example, a legal disclaimer) then changing the method signature // for this method will mean that all tests that rely on this behaviour won't compile. return new HomePage(driver); } // The login page allows the user to submit the login form knowing that an invalid username and / or password were entered public LoginPage submitLoginExpectingFailure() { // This is the only place that submits the login form and expects the destination to be the login page due to login failure. driver.findElement(loginButtonLocator).submit(); // Return a new page object representing the destination. Should the user ever be navigated to the home page after submiting a login with credentials // expected to fail login, the script will fail when it attempts to instantiate the LoginPage PageObject. return new LoginPage(driver); } // Conceptually, the login page offers the user the service of being able to "log into" // the application using a user name and password. public HomePage loginAs(String username, String password) { // The PageObject methods that enter username, password & submit login have already defined and should not be repeated here. typeUsername(username); typePassword(password); return submitLogin(); } }
```
17.什么是page factory設(shè)計(jì)模式?
實(shí)際上是官方給出的java page object的工廠模式實(shí)現(xiàn)。
18.怎樣去選擇一個(gè)下拉框中的value=xx的option?
使用select類(lèi),具體可以加群了解
19.如何在定位元素后高亮元素(以調(diào)試為目的)?
使用javascript將元素的border或者背景改成黃色就可以了。
20.什么是斷言?
可以簡(jiǎn)單理解為檢查點(diǎn),就是預(yù)期和實(shí)際的比較
如果預(yù)期等于實(shí)際,斷言通過(guò),測(cè)試報(bào)告上記錄pass
如果預(yù)期不等于實(shí)際,斷言失敗,測(cè)試報(bào)告上記錄fail
21.如果你進(jìn)行自動(dòng)化測(cè)試方案的選型,你會(huì)選擇哪種語(yǔ)言,java,js,python還是ruby?
哪個(gè)熟悉用哪個(gè)
如果都不會(huì),團(tuán)隊(duì)用哪種語(yǔ)言就用那種
22.page object設(shè)置模式中,是否需要在page里定位的方法中加上斷言?
一般不要,除非是要判斷頁(yè)面是否正確加載。
Generally don't make assertions
23.page object設(shè)計(jì)模式中,如何實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)?
返回另一個(gè)頁(yè)面的實(shí)例可以代表頁(yè)面跳轉(zhuǎn)。
```
// The login page allows the user to submit the login form public HomePage submitLogin() { // This is the only place that submits the login form and expects the destination to be the home page. // A seperate method should be created for the instance of clicking login whilst expecting a login failure. driver.findElement(loginButtonLocator).submit(); // Return a new page object representing the destination. Should the login page ever // go somewhere else (for example, a legal disclaimer) then changing the method signature // for this method will mean that all tests that rely on this behaviour won't compile. return new HomePage(driver); }
```
24.自動(dòng)化測(cè)試用例從哪里來(lái)?
手工用例的子集,盡量
簡(jiǎn)單而且需要反復(fù)回歸
穩(wěn)定,也就是不要經(jīng)常變來(lái)變?nèi)?/p>
核心,優(yōu)先覆蓋核心功能
25.你覺(jué)得自動(dòng)化測(cè)試最大的缺陷是什么?
實(shí)現(xiàn)成本高
運(yùn)行速度較慢
需要一定的代碼能力才能及時(shí)維護(hù)
26.什么是分層測(cè)試?
畫(huà)給他/她看。
27.webdriver可以用來(lái)做接口測(cè)試嗎?
不用糾結(jié),不可以。
28.selenium 是否可以調(diào)用js來(lái)對(duì)dom對(duì)象進(jìn)行操作?
Could selenium call js for implementation dom object directly?
是
29.selenium 是否可以向頁(yè)面發(fā)送鼠標(biāo)滾輪操作?
Could selenium send the action of mouse scroll wheel?
不能
30selenium 是否可以模擬拖拽操作?
Does selenium support drag and drop action?
可以
31.selenium 對(duì)下拉列表的中的選項(xiàng)進(jìn)行選擇操作時(shí),需要被操作對(duì)象的標(biāo)簽是什么?
When Selenium selects the option in selenium, What tag the DOM object should be?
select
32.selenium 上傳文件操作,需要被操作對(duì)象的type屬性是什么?
When Selenium upload a file, what value of type of the DOM object should be?
file
以上是“selenium面試題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!