2015-04-01 37 views
-1

我试图通过使用两种方式找到按钮。第一个由xpath直接工作。但第二种方式不起作用。使用click()函数后没有任何事情发生,也没有错误。selenium:找到正确的按钮,但未能通过使用类名称单击

第一种方式:

By.xpath(".//*[@id='app:viewAppInsideConfirm:confirmInside:j_id300']").click() 

方式二:

By.className("iceCmdBtn").click() 

HTML:

<input id="app:viewAppInsideConfirm:confirmInside:j_id300" class="iceCmdBtn" type="submit" value=" Yes " onfocus="setFocus(this.id);" onclick="parent.JSsessionTimeOut.resetSessionTimeout();iceSubmit(form,this,event);return false;" onblur="setFocus('');" name="app:viewAppInsideConfirm:confirmInside:j_id300"></input> 

BTW:

我尝试使用XPath来查找不同的项目,我得到:

使用“透过”为关键字可以找到它,但同为By.className(“iceCmdBtn”)找到,但与点击()不采取行动......

String xpathLocater = ".//*[@type='submit']"; 
    driver.findElement(By.xpath(xpathLocater)).click(); 

为“是” ,我找到错误元素...

String xpathLocater =“.//*[@value='Yes']”; driver.findElement(By.xpath(xpathLocater))。click();

伙计们!

它有另一个按钮:

所以我想我需要使用FindElements

+0

如果它通过xpath工作,为什么不只是使用xpath? – 2015-04-01 20:43:06

+0

因为id会改变,所以这是动态的 – Peter 2015-04-01 20:45:43

+0

哪个在您使用的Driver上找到方法? FindElement或FindElements?如果您正在使用第一种方法,则驱动程序停止在第一个找到的元素上。也许'Driver.FindElements(By.ClassName(“iceCmdBtn”))。First(e => e.Displayed).Click()'可以帮助吗? (顺便说一下C#语法) – core 2015-04-01 22:12:01

回答

2

假设id的动态部分是300在你的榜样,你可以申请使用starts-with()局部检查:

By.xpath(".//input[starts-with(@id, 'app:viewAppInsideConfirm:confirmInside:') and @class='iceCmdBtn']").click() 
+0

谢谢。太多'app:viewAppInsideConfirm:confirmInside:'found ...... – Peter 2015-04-02 16:13:27

+0

@Chen好的,更新了xpath,添加了'input'而不是'*'并且检查了类。一探究竟。 – alecxe 2015-04-02 17:25:08

+0

Thanks〜与String xpathLocater =“// input [starts-with(@ id,'app:viewAppInsideConfirm:confirmInside:j_id')]”; – Peter 2015-04-02 20:03:43

相关问题