1. 程式人生 > >selenium webdriver定位不到元素的五種原因及解決辦法

selenium webdriver定位不到元素的五種原因及解決辦法

1.動態id定位不到元素
for example:
        //WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));
        WebElement xiexin_element = driver.findElement(By.xpath("//span[contains(.,'寫 信')]"));
        xiexin_element.click();

   上面一段程式碼註釋掉的部分為通過id定位element的,但是此id“_mail_component_82_82”後面的數字會隨著你每次登陸而變化,此時就無法通過id準確定位到element。
   所以推薦使用xpath的相對路徑方法查詢到該元素。

2.iframe原因定位不到元素

    由於需要定位的元素在某一個frame裡邊,所以有時通過單獨的id/name/xpath還是定位不到此元素
比如以下一段xml原始檔:
<iframe id="left_frame" scrolling="auto" frameborder="0" src="index.php?m=Index&a=Menu" name="left_frame" noresize="noresize" style="height: 100%;visibility: inherit; width: 100%;z-index: 1">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<body class="menuBg">
<div id="menu_node_type_0">
<table width="193" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<tr>
<td id="c_1">
<table class="menuSub" cellspacing="0" cellpadding="0" border="0" align="center">
<tbody>
<tr class="sub_menu">
<td>
<a href="index.php?m=Coupon&a=SearchCouponInfo" target="right_frame">密碼重置</a>
</td>
</tr>

原本可以通過
WebElement element = driver.findElement(By.linkText("密碼重置"));
來定位此元素,但是由於該元素在iframe id="left_frame"這個frame裡邊 所以需要先通過定位frame然後再定位frame裡邊的某一個元素的方法定位此元素
WebElement element =driver.switchTo().frame("left_frame").findElement(By.linkText("密碼重置"));

3.不在同一個frame裡邊查詢元素
大家可能會遇到頁面左邊一欄屬於left_frame,右側屬於right_frame的情況,此時如果當前處在
left_frame,就無法通過id定位到right_frame的元素。此時需要通過以下語句切換到預設的content
driver.switchTo().defaultContent();

例如當前所在的frame為left_frame

       WebElement xiaoshoumingxi_element = driver.switchTo().frame("left_frame").findElement(By.linkText("銷售明細"));
       xiaoshoumingxi_element.click();

需要切換到right_frame    
       driver.switchTo().defaultContent();
     
       Select quanzhong_select2 = new Select(driver.switchTo().frame("right_frame").findElement(By.id("coupon_type_str")));
       quanzhong_select2.selectByVisibleText("售後0小時");

4. xpath描述錯誤
這個是因為在描述路徑的時候沒有按照xpath的規則來寫 造成找不到元素的情況出現

5.點選速度過快 頁面沒有加載出來就需要點選頁面上的元素
這個需要增加一定等待時間,顯示等待時間可以通過WebDriverWait 和util來實現
例如:
       //用WebDriverWait和until實現顯示等待 等待歡迎頁的圖片出現再進行其他操作
       WebDriverWait wait = (new WebDriverWait(driver,10));
       wait.until(new ExpectedCondition<Boolean>(){
           public Boolean apply(WebDriver d){
               boolean loadcomplete = d.switchTo().frame("right_frame").findElement(By.xpath("//center/div[@class='welco']/img")).isDisplayed();
               return loadcomplete;
           }
       });
也可以自己預估時間通過Thread.sleep(5000);//等待5秒 這個是強制執行緒休息

6.firefox安全性強,不允許跨域調用出現報錯
錯誤描述:uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location:

解決辦法:
這是因為firefox安全性強,不允許跨域呼叫。
Firefox 要取消XMLHttpRequest的跨域限制的話,第一
是從 about:config 裡設定 signed.applets.codebase_principal_support = true; (位址列輸入about:config 即可進行firefox設定)
第二就是在open的程式碼函式前加入類似如下的程式碼: try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { alert("Permission UniversalBrowserRead denied."); }

相關推薦

轉載:selenium webdriver定位元素原因解決辦法

出現 src 解決 rac 屬於 fin 就是 testing dbo 1.動態id定位不到元素for example: //WebElement xiexin_element = driver.findElement(By.id("_mail_compone

selenium webdriver定位元素原因解決辦法

1.動態id定位不到元素 for example:         //WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));         WebElement xiexin_element = dr

Python+Selenium定位元素常見原因解決辦法(報:NoSuchElementException)

Python+Selenium定位不到元素常見原因及解決辦法(報:NoSuchElementException)      在做web應用的自動化測試時,定位元素是必不可少的,這個過程經常會碰到定位不到元素的情況(報selenium.common.exceptions.

在js文件中寫el表達式取到值的原因解決方法

.ajax cnblogs 一個 雙引號 ssid null 使用 ucc name 1、javascript是客戶端執行,EL是在服務端執行,而服務端比客戶端先執行,所以取不到值 2、要想獲取"${jcDropClass.jcClass.id}"的值,可以在jsp中,用一

jquery ajax success 函數 異步調用方法中能給全局變量賦值的原因解決辦法

tex span var getc res syn ucc 解決辦法 asp 在調用一個jquery的ajax方法時我們有時會需要該方法返回一個值或者給某個全局變量賦值,可是我們發現程序執行完後並沒有獲取到我們想要的值,這時很有可能是因為你用的是ajax的異步調用async

php安裝擴展模塊後,重啟生效的原因解決辦法

... star nmp har 成功 config ces .... conf 在lnmp運維環境中,我們經常會碰到有些php依賴的擴展模塊沒有安裝,這就需要後續添加這些擴展模塊。在擴展被安裝配置後,往往會發現php-fpm服務重啟後,這些擴展並沒有真正加載進去!下面

Linux能執行netstat命令的原因解決辦法

伺服器是阿里雲的,這是我出的錯,使用netstate命令報 -bash: netstate: command not found 出現這個錯誤的原因:由於網路工具沒有安裝 使用以下命令安裝即可: yum install net-tools 執行命令: netstat -

RabbitMQ中的消費者處理訊息HandleDelivery生效的原因解決辦法

今天遇到一個問題就是在使用rabbitMQ的時候,消費者接受了訊息但訊息處理函式沒有執行也就是handleDelivery沒有執行,也沒有報錯。 之後看了原始碼才發現,引數名字改了 可以看到在沒有加AMQP之前handleDelivery是灰色的,所以它沒有

log4net輸出日誌的原因解決方案

 沒有在AssemblyInfo檔案中新增下面的程式碼: [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch  = true)] 1 2 執行程式目錄下沒有log4net

記憶體溢位的幾原因解決辦法

對於JVM的記憶體寫過的文章已經有點多了,而且有點爛了,不過說那麼多大多數在解決OOM的情況,於此,本文就只闡述這個內容,攜帶一些分析和理解和部分擴充套件內容,也就是JVM宕機中的一些問題,OK,下面說下OOM的常見情況:第一類記憶體溢位,也是大家認為最多,第一反應認為是的記

解決Mac版百度筆刪除"百度拼音"電腦重啟後輸入法選單中還存在的原因解決辦法

由於本人使用五筆打字,試了很多Mac上五筆輸入法,最後用來用去還是覺得百度五筆最好用(僅是個人喜好,不喜勿噴)。安裝完後,Mac版百度五筆預設帶有百度拼音: 列表中的輸入法過多,切換時,需要多按幾次才能切換到百度五筆,大大降低了輸入的效率,所以要把不使用的

Nuxt.js專案識別import問題原因解決方法

1、問題 使用npx create-nuxt-app建立Nuxt.js專案,專案預設使用require引入依賴,如下: 平時習慣使用import,改為import Koa from 'koa'會報SyntaxError: Unexpected identifier,即不識別impo

CentOS7修改主機名稱(hostname)總是成功的原因解決辦法

最近研究一個東西,參考別人的文章搭建一套大資料環境。文章寫的非常詳細也非常好,跟著文章一步步進行實踐,基本都沒有問題,但是到了最後一步進行試驗時,CentOS7總是報錯:INFO metrics.MetricsUtil:Unable to obtain hostName ja

手機GPS無法定位或訊號弱的原因解決方法

     GPS是英文Global Positioning System(全球定位系統)的簡稱。主要目的是為陸海空三大領域提供實時、全天候和全球性的導航服務,GPS無法定位受諸多因素制約,最主要的因素是訊號和運動狀態。    首先來看看GPS訊號的問題,是所有手機都存在的情況

openId導致的微信中“下單賬號和支付賬號一致”原因解決辦法

圖1        出現的問題如圖1所示,出現問題的場景是使用者A分享某個公益專案的連結到微信朋友圈,使用者B開啟這個連結準備捐款時就出現上面的問題。        在網上查詢相關的問題,大多語焉不

ctrl+v貼上快捷鍵突然能使用的原因解決方案

突然發現ctrl+v貼上快捷鍵不能使用了,但是右鍵->貼上是可以的,我查了網上給的一些解決方案,有丟失了什麼dll檔案什麼的,但是太複雜看不懂,其實這種問題最常見的就是和某個軟體的快捷鍵衝突了。這裡我發現是與搜狗輸入法的快捷鍵衝突了,開啟搜狗輸入法的搜狗管理器檢視,果

Android能呼叫java.awt的原因解決辦法和思考

android 裡面不能使用awt,底層沒有具體的實現awt android裡面的視窗建立過程決定了介面只能是android裡面的組建。 android的元件都是通過遠端的IPC呼叫完成的,也就是說服務端有什麼功能才能用什麼功能。 不是所有用java寫的程式都能在標準jv

ArcGIS 10.1 for Server 資料註冊失敗的一可能原因解決辦法

ArcGIS 10.1 for Server是最新的GIS伺服器技術,相比10.0版本,10.1在服務正確性、可靠性、穩定性方面做出了很大改進,其中資料註冊就是確保服務正確可靠的一種有效方式。 所謂資料註冊,就是將服務所引用的資料路徑,註冊到ArcGISServer站點中,確保站點中所有的GIS伺服器均能正

nginx “403 Forbidden” 錯誤的原因解決辦法

所有 html 網上 查找 lan href 原因 我沒 分配 ————————————————————————————————首先 錯誤的原因及解決辦法 ———————————————————————————————————————————————————— ng

Windows資源管理器打開文件夾卡頓原因解決辦法

打開 監視器 啟用 div xpl 通過 windows 資源 解決方法 全新安裝的 Win8 打開文件夾居然會卡頓,特別是打開EXE程序比較多的文件夾,通過資源監視器查看,幕後兇手就是 Windows Defender 殺毒軟件。 MSE是微軟提供防毒功能,而Window