javascript
getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定!
在使用Selenium做web自動化測試過程中,經常會遇到一些組件無法通過Selenium直接識別和處理,比如<input>標簽組合的下拉框,比如日期控件。面對這些元素,我們可以引入JS注入技術來解決問題。
JavaScript是一種被廣泛用于Web前端開發的腳本語言 ,常用來為網頁添加動態功能(彈窗,點擊事件....)通過HTML DOM,JavaScript提供了頁面對象獲取和操作功能。
DOM模型把HTML文檔解析成一棵樹,根節點是<html>,從根節點往下根據節點之間的關系(順序或包含)把節點解析為兄弟節點和孩子節點。<HTML> 節點有不同的類型:
元素
屬性
文本
Javascript可以根據DOM結構獲取任意的HTML元素,變更這些元素的屬性,樣式,并對元素的鼠標鍵盤事件做出響應:
Javascript提供了通過id查找元素的方式:document.getElementById(id);除了id, javascript還支持通過類名和標簽名查找元素
Javascript提供通過innerHTML改變元素內容的方式:document.getElementById(id).innerHTML=new HTML,通過變更節點內部的HTML可以改變元素的文本和行為
Javascript提供通過attribute改變元素屬性的方式:
document.getElementById(id).attribute=new value
Selenium支持Javascript
Selenium WebDriver可以被轉換為JavaScriptExecutor,通過JavaScriptExecutor執行Javascript腳本,通過這種方式可以實現Selenium的Javascript注入,從而實現對復雜頁面元素的操作。
WebDriver driver=newChromeDriver();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("js語句");
Jquery
Jquery是一個增強的JavaScript框架,它封裝了JavaScript常用的功能代碼,簡化了HTML文檔操作、事件處理、動畫設計和Ajax交互。
對于復雜的網頁元素查找,通過Javascript較為低效,此時可以引入Jquery簡化元素查找。
Jquery常見選擇器如下,詳細語法課參見官網https://jquery.com/
Selenium支持Jquery
Selenium可以通過判定當前待測的網站是否引入Jquery,如果沒有則加載Jquery,加載完畢以后即可用Jquery代碼來實現前端頁面元素的操作。
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查找出頁面百度鏈接元素個數(.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對象出現異常");
}
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
出 處:微信公眾號:自動化軟件測試平臺
版權說明:歡迎轉載,但必須注明出處,并在文章頁面明顯位置給出文章鏈接
總結
以上是生活随笔為你收集整理的getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1299元起!华为发布畅享60:鸿蒙3系
- 下一篇: 微星推出新款尊爵 13 Evo 轻薄本: