2014-03-31 84 views
1

我正在運行腳本以自動執行測試用例併產生此獨特問題。 我檢測並使用了用於點擊等元素的ID。但是,突然間,這些ID已經改變,劇本不再工作。 另一個奇怪的是,這些ID與在Chrome中檢查時的腳本相同,但在Firefox驅動程序瀏覽器中不同。處理通過Selenium Webdriver始終更改ID的元素

Firebug的測試驅動程序: -

<p class="description" onclick="selectElementTextListForIE(this,'tile29', 'tile19');selectElementTextList(this,'tile29', '')" id="tile29_span_0_0"> 
                  Platinum 
                 </p> 

鉻督察相同的元素: -

<p class="description" onclick="selectElementTextListForIE(this,'tile20', 'tile19');selectElementTextList(this,'tile20', '')" id="tile20_span_0_0"> 
                  Platinum 
                 </p> 

而且,這可能是用於檢測這樣的元素,其標識上運行產生的最佳策略。 我甚至嘗試過使用XPATH,但也包含ID的參考 例如。 。@ ID =「tile276_input

任何幫助將不勝感激

感謝

阿布舍克

+0

如果您要展示來自Chrome和Firefox的HTML示例,以便我們看到不同之處,那將更容易爲您提供幫助。 – Richard

回答

5

你可以利用這個CSS爲你的元素,看起來像它:

<* id="tile276_input" /> 

你需要做的是找出有什麼改變,我認爲它是中間的數字,如果是,那麼你的選擇器看起來像這樣:

By.cssSelector("*[id^='tile'][id$='input']") 

這將尋找任何有一個ID是「與tile開始」,並與input「結束。在我們的例子中,"tile276_input"與此相符。

this article如果您想了解更多信息

+0

但是有多個條目以相同的ID開頭。 實施例: - browser.find_element(:ID => 'tile20_span_0_0')點擊#Platinum browser.manage.timeouts.implicit_wait = 1 browser.find_element(:ID => 'tile210')點擊。 #Ok按鈕 browser.manage.timeouts。implicit_wait = 1個 #SELECT服務 browser.find_element(:ID => 'tile45_span_3_0')。單擊#Thermographic – SoftwareTestingEnthusiast

+0

,那麼你需要更具體與您的選擇。瞭解如何使用CSS來處理父 - 子後代層次結構,並解決您的問題 – sircapsalot

+0

@ user007 - 如果使用Xpath,則可以執行復雜的選擇器,包括獲取元素然後獲取其父項,然後獲取其他子項......等你不需要通過身份證得到。您可以通過使用css或xpath的相對位置來獲取元素。 – djangofan

0

您也可以嘗試containsstarts-with()這樣的事情

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

driver.findElement(By.xpath("//* [start-with(@id,'title')]")) 
0
WebElement element = driver.getElement(By.cssSelector("[id^='title']); 

或者

WebElement element = driver.getElement(By.cssSelector("id:contains('title')")); 

您可以使用此元素執行所需的操作。

相關問題