2012-03-28 70 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