javascript
getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定!
在使用Selenium做web自動化測試過程中,經(jīng)常會遇到一些組件無法通過Selenium直接識別和處理,比如<input>標(biāo)簽組合的下拉框,比如日期控件。面對這些元素,我們可以引入JS注入技術(shù)來解決問題。
JavaScript是一種被廣泛用于Web前端開發(fā)的腳本語言 ,常用來為網(wǎng)頁添加動態(tài)功能(彈窗,點擊事件....)通過HTML DOM,JavaScript提供了頁面對象獲取和操作功能。
DOM模型把HTML文檔解析成一棵樹,根節(jié)點是<html>,從根節(jié)點往下根據(jù)節(jié)點之間的關(guān)系(順序或包含)把節(jié)點解析為兄弟節(jié)點和孩子節(jié)點。<HTML> 節(jié)點有不同的類型:
元素
屬性
文本
Javascript可以根據(jù)DOM結(jié)構(gòu)獲取任意的HTML元素,變更這些元素的屬性,樣式,并對元素的鼠標(biāo)鍵盤事件做出響應(yīng):
Javascript提供了通過id查找元素的方式:document.getElementById(id);除了id, javascript還支持通過類名和標(biāo)簽名查找元素
Javascript提供通過innerHTML改變元素內(nèi)容的方式:document.getElementById(id).innerHTML=new HTML,通過變更節(jié)點內(nèi)部的HTML可以改變元素的文本和行為
Javascript提供通過attribute改變元素屬性的方式:
document.getElementById(id).attribute=new value
Selenium支持Javascript
Selenium WebDriver可以被轉(zhuǎn)換為JavaScriptExecutor,通過JavaScriptExecutor執(zhí)行Javascript腳本,通過這種方式可以實現(xiàn)Selenium的Javascript注入,從而實現(xiàn)對復(fù)雜頁面元素的操作。
WebDriver driver=newChromeDriver();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("js語句");
Jquery
Jquery是一個增強(qiáng)的JavaScript框架,它封裝了JavaScript常用的功能代碼,簡化了HTML文檔操作、事件處理、動畫設(shè)計和Ajax交互。
對于復(fù)雜的網(wǎng)頁元素查找,通過Javascript較為低效,此時可以引入Jquery簡化元素查找。
Jquery常見選擇器如下,詳細(xì)語法課參見官網(wǎng)https://jquery.com/
Selenium支持Jquery
Selenium可以通過判定當(dāng)前待測的網(wǎng)站是否引入Jquery,如果沒有則加載Jquery,加載完畢以后即可用Jquery代碼來實現(xiàn)前端頁面元素的操作。
publicclass JqueryTest {
staticJavascriptExecutor js;
staticWebDriver driver;
publicstaticvoidmain(String[] args) {
driver=newChromeDriver();
js=(JavascriptExecutor)driver;
driver.get("http://www.baidu.com/");
//判斷Jquery是否存在,若不存在則注入
if(!jqueryLoaded()){
injectJquery();
}
//通過jquery查找出頁面百度鏈接元素個數(shù)(.mnav)
List elements = (List) js
.executeScript("return jQuery.find('.mnav')");
driver.quit();
}
publicstaticbooleanjqueryLoaded() {
booleanloaded=false;
try{
loaded = (Boolean) js.executeScript("return"+" jQuery()!=null");
}catch(Exception e){
System.out.println("查找jQuery對象出現(xiàn)異常");
}
System.out.println("頁面已存在Jquery對象,無需注入:"+ loaded);
returnloaded;
}
publicstaticvoidinjectJquery() {
js.executeScript(" var headID = "
+"document.getElementsByTagName("head")[0];"
+"var newScript = document.createElement('script');"
+"newScript.type = 'text/javascript';"
+"newScript.src = "
+"'http://code.jquery.com/jquery-latest.js';"
+"headID.appendChild(newScript);");
作 者: Testfan kitty
出 處:微信公眾號:自動化軟件測試平臺
版權(quán)說明:歡迎轉(zhuǎn)載,但必須注明出處,并在文章頁面明顯位置給出文章鏈接
總結(jié)
以上是生活随笔為你收集整理的getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1299元起!华为发布畅享60:鸿蒙3系
- 下一篇: gradle idea java ssm