2012-03-28 105 views
1

我必須點擊具有id的按鈕。但是這個id是動態生成的。並找到By.className()沒有做任何事情。如何處理HTML中的動態ID

該按鈕的HTML代碼:

<td class="x-btn-mc"> 
    <em class="" unselectable="on"> 
     <button id="cq-gen372" class=" x-btn-text" type="button">OK</button> 
    </em> 
</td> 

如何選擇按鈕,並在Java中點擊它?

回答

1

By.className()確實在IE和一些較舊的Selenium版本中被竊聽。我不知道它仍然是這樣。無論如何!您可以搜索很多東西,而不僅僅是id:

如果它是頁面上唯一(或第一個)確定按鈕,您可以嘗試By.xpath("//button[text()='OK']");

欲瞭解更多xpaths,請參閱XPath v1.0 on w3.orgXPath v2.0 on w3.org - only for some new browsers!

或者你也可以使用css選擇器 - The w3 againwikipedia

+0

感謝üSlanec去。但是,這並沒有幫助我..確定按鈕不在框架driver.switchTo()。frame(「cq-gen379」); selenium.type(「id = CQrte」,「thx」); By.xpath( 「//按鈕[文本()= '行']」)點擊();我的代碼在輸入時很好。但是因爲我不知道如何走出失敗的框架。 swicthTo.defaultContent()帶我到主窗口,這是彈出我的框架。請幫我... – smriti 2012-03-28 13:39:15

+0

switchTo框架似乎沒問題。但是你不能將'selenium'和'driver'命令混合在一起 - 或者你可以,但是'switchTo()'只適用於'driver','selenium'仍然認爲你在主窗口。對於'selenium',你需要使用'selectFrame()'。 或只是堅持'驅動程序'並擺脫'硒': 'driver.switchTo()。frame(「cq-gen379」); (「CQX」))。sendKeys(「thx」); ();} driver.findElement(Byxpath(「// button [text()='OK']」)。click());' – 2012-03-28 13:48:47

+0

NO LUCK :(。如何擺脫{frame.driver.switchTo ).frame(「cq-gen379」)}正如OK按鈕超出了iframe。 – smriti 2012-03-28 14:04:19

1

你可以用下面的選項

//button[text()='OK']  
    xpath=//button[contains(., 'OK')] 
    //button[contains(@class, 'x-btn-text')] 
+0

tnx Rohti但沒有運氣,請你看看我的評論Slanec上面,不知你是否可以幫助我... ... – smriti 2012-03-28 13:43:17

+0

Slanes說,你首先去selectframe()然後點擊特定的元素 – 2012-03-28 13:54:49