2017-03-16 9 views
1

是xpath的id參數是動態的成幀xpath表達式 - 下面的webdriver用java

sampels:

//*[@id="00e46000000UZ8a_RelatedCustomPermissionsSecurityList_page"]/div[1]/div" 
//*[@id='00e6F000001ffnh_RelatedCustomPermissionsSecurityList_page']/div[1]/div 

所以15位動態生成開始時,所以我試圖找到下面的XPath

//[ends-with(@id,'_RelatedCustomPermissionsSecurityList_page')]/div[1]/div 

在執行我得到下面的錯誤

元素
invalid selector: Unable to locate an element with the xpath expression //[ends-with(@id,'_RelatedCustomPermissionsSecurityList_page')]/div[1]/div because of the following error: 
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//[ends-with(@id,'_RelatedCustomPermissionsSecurityList_page')]/div[1]/div' is not a valid XPath expression. 

回答

2

Selenium不支持ends-with()語法。您可能需要使用代替

//*[contains(@id,'_RelatedCustomPermissionsSecurityList_page')]/div[1]/div 

,或者您也可以後15日開始字符

//*[substring(@id, 16) = '_RelatedCustomPermissionsSecurityList_page']/div[1]/div 
+0

感謝,含有不工作,但串其工作,可以請你澄清爲何含有不工作? – Prabu

+0

你的意思是元素不能用'contains()'找到,否則你仍然會得到'invalid selector'異常? – Andersson

+0

使用// * [包含(@id,'_ RelatedCustomPermissionsSecurityList_page')]/div [1]/div得到同樣的異常,這是我的問題 – Prabu

1

ends-withxpath 2.0功能使用substring()匹配值。瀏覽器僅支持xpath 1.0。請參閱reference

使用含有代替

//[contains(@id, '_RelatedCustomPermissionsSecurityList_page')]/div[1]/div 
+0

謝謝包含不工作獲取相同的錯誤 – Prabu

0

的替代的方式來處理動態元素,您可以使用CSSSelector以及

對於這樣的:

//*[@id="00e46000000UZ8a_RelatedCustomPermissionsSecurityList_page"]/div[1]/div 

使用CSSselector這樣的:

[id$='_RelatedCustomPermissionsSecurityList_page']>div>div 

還應考慮這個:

css=a[id^='id_prefix_'] 

css=a[id$='_id_suffix'] 

css=a[id*='id_pattern']