日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定!

發(fā)布時間:2023/12/19 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在使用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。