2015-11-05 124 views
0

我試圖使用Selenium爲OBIEE應用程序自動執行我的測試用例。現在,我需要從生成的表格報告中讀取一個值。問題是,總數最後一個單元格的ID不斷變化。例如, 例如,當前ID是:db_saw_9270_6_1610_0。 刷新後,ID變成別的東西。之間的4個數字(9270)發生變化。剩下的位是相同的。我使用下面的邏輯來捕捉這個元素:XPath-從具有動態ID的表中獲取元素

driver.findElement(By.xpath(".//*[contains(@id, '_6_1610_0')]")).getText(); 

但是,它返回org.openqa.selenium.NoSuchElementException:找不到元素:

請告訴我爲什麼我有什麼錯和我該怎麼辦?

+0

你能試試嗎? driver.findElement(By.xpath(「// * [contains(@id,'_6_1610_0')]」))。getText(); –

+0

試過。不工作。 –

+0

你可以放下你的一些html代碼嗎? – e1che

回答

0

你可以嘗試starts-withsubstring(作爲XPath的替代2.0 methdod ends-with):

string xpath = "//*[starts-with(@id, 'db_saw_') and substring(@id, string-length(@id) - 8) = '_6_1610_0']" 

driver.findElement(By.xpath(xpath)).getText(); 
+0

異常在線程 「主要」 org.openqa.selenium.InvalidSelectorException:給定的選擇器.//*[starts-with(@id, 'db_saw_')和「子串(@id,串長度(@id) - 8 )='_6_1610_0']無效或不會導致WebElement。出現以下錯誤: InvalidSelectorError:無法找到與xpath表達式.//*[starts-with(@id, 'db_saw_' 的子串的元素)和「(@id,串長度(@id) - 8) ='_6_1610_0'],因爲以下錯誤: SyntaxError:表達式不是合法表達式。 –

+0

請勿使用「。」在前面 」//」 !看看我的代碼,它不在那裏! – drkthng

+0

獲得相同的結果。 :( 引起:org.openqa.selenium.InvalidSelectorException:給定的選擇器// * [開始-與(@id, 'db_saw_')和「子串(@id,串長度(@id) - 8) =「_6_1610_0」]是無效或不導致WebElement出現以下錯誤: InvalidSelectorError:無法與xpath表達式來定位元件// * [開始-與(@id,「db_saw_」)和'子(@id,串長度(@id) - 8)=由於以下錯誤的「_6_1610_0」]: 語法錯誤:該表達式不是合法的表達 –

0

你可以試試下面的XPath: -

driver.findElement(By.xpath("//*[starts-with(@id, 'db_saw')]")).getText(); 
+0

號其實,有很多以「db_saw」元素。 –

+0

@Abhineet庫馬爾,Ok..so如果您知道所需的Web元素的位置,那麼在這種情況下你可以提到p命名編號就像// * [starts-with(@id,'db_saw')] [2],這意味着您想從特定xpath標識的Web元素集訪問第2個Web元素。 –