2015-11-05 127 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元素。 –