Selenium Webdriver - (Java) - 单击带有动态ID的按钮

时间:2013-10-11 06:27:50

标签: dynamic selenium webdriver element

1)我的网页上有一个dialog,有两个按钮Yes& No
2)这些按钮的IDs每次动态变化 3)如何处理这种情况并单击Yes按钮?
4)两个按钮,Yes& No,具有相同的classname 1.e. rwInnerSpan
5)以下是Xpath按钮的Yes
(.//*[@id='confirm1381468352443_content']/div/div[2]/a[1]/span/span)
xpath中的1381468352443部分为dynamically changing

以下是页面的源代码
`

<tr class="rwTitleRow">  
<tr class="rwContentRow">  
<td class="rwCorner rwBodyLeft"> </td>  
<td class="rwWindowContent" valign="top">  
<iframe frameborder="0" name="confirm1381468352443" src="javascript:'<html></html>';" style="width: 100%; height: 100%; border: 0px none; display: none;" tabindex="0">
<div id="confirm1381468352443_content">  
<div class="rwDialogPopup">  
<div class="rwDialogText">  
<div>  
<a class="rwPopupButton" href="javascript:void(0);" onclick="$find('confirm1381468352443').close(true);" tabindex="-1">  
<span class="rwOuterSpan">  
<span class="rwInnerSpan">Yes</span>  
</span>    
</a>  
<a class="rwPopupButton" href="javascript:void(0);" onclick="$find('confirm1381468352443').close(false);" tabindex="-1">  
<span class="rwOuterSpan">  
<span class="rwInnerSpan">No</span>  
</span>  
</a>`

先谢谢!!

4 个答案:

答案 0 :(得分:1)

您可以直接检查Xpath中的文本:

driver.findElements(By.xpath("//a[@class='rwPopupButton']/span/span[contains(text(), 'Yes')]"))

答案 1 :(得分:1)

有一种方法可以使用部分链接文本查找对象,因此您可以尝试:

driver.findElement(By.partialLinkText("Yes")).click();

Plain By.linkText可能无法正常工作,因为链接中有额外的空格或字符。

答案 2 :(得分:-1)

您可以根据文本单击按钮。以下方法将根据类定位器和文本为您提供一个webelement。

WebElement getElementBasedOnClassAndText(String classLocator, String text){
    List<WebElement> elements = driver.findElements(By.className(classLocator))
    for(WebElement element : elements){
        if(element.getText().contentEquals(text)){
            return element
        }
    }
    Assert.fail("Unable to find any element with the said Text")
}

获得元素后,您可以对其采取任何操作。

答案 3 :(得分:-1)

由于它是动态的,我会寻找更改的名称:

//Find the dynamicly created ID
String dynamicID = driver.findElement(By
    .xpath("//iframe[contains(@name,'confirm')]")
        .getAttribute("name");
//Use that ID to find the Yes option
driver.findElement(By
    .xpath("//*[@id='"+dynamicID +"_content']/div/div[2]/a[1]/span/span")
            .click();