如何使用XPath中附近元素的文本在selenium web驱动程序java中选择单选按钮

时间:2015-11-04 08:58:29

标签: selenium xpath selenium-webdriver

我需要在第7个tr中使用id="optProfile"选择radion按钮,使用文本" Internet Users"在td / font标签中。我正在使用下面的代码,但它无法正常工作,并从第1行开始选择单选按钮。任何人都可以帮忙

    <html>
<head>
<body onmousedown="infCheckMouseDown(event);" onkeydown="infCheckDownKey(event);" onbeforeunload="INFIEExit();" onload="INFsetInitialFocus();window_onload();CreateScriptingFrames();">
<form action="PEINFCommon.ASP?WCI=Genericcreen&WCE=GenericEvent" onsubmit="return false" name="Genericcreen" method="post">
<table class="TopLevelTable" align="center" width="100%" border="0">
<tbody>
<tr>
<td width="100%">
<table width="100%" border="0">
<tbody>
<tr>
<tr>
<tr>
<tr>
<tr>
<td width="100%">
<div align="center">
<center>
<table width="98%" cellspacing="0" cellpadding="0" border="0" cols="1">
<tbody>
<tr align="center">
<td align="left">
<table width="100%">
<tbody>
<tr>
<tr>
<tr>
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<tr height="">
<td width="5%">
<input id="optProfile" type="Radio" callfunction="" value="" onblur="ResetScript(this);return true;" onfocus="HighlightScript(this);" onclick="" name="" size="11">
<font class="fLabel"></font>
<br>
<input id="hidCurrentProfile" type="hidden" onblur="ResetScript(this);" onfocus="HighlightScript(this);" value="N" callfunction="" size="11" name="/Root/ACORD/InsuranceSvcRs/nk_ck_com.cc_FetchUserProfileRs/nk_ck_com.cc_SecurityDetails/nk_ck_com.cc_AvailableProfile[12]/nk_ck_com.cc_CurrentProfileInd">
<input id="hidProfile" type="hidden" onblur="ResetScript(this);" onfocus="HighlightScript(this);" value="RACINTER" callfunction="" size="11" name="/Root/ACORD/InsuranceSvcRs/nk_ck_com.cc_FetchUserProfileRs/nk_ck_com.cc_SecurityDetails/nk_ck_com.cc_AvailableProfile[12]/nk_ck_com.cc_ProfileCd">
</td>
<td>
<font class="">Internet Users</font>
</td>
</tr>
<tr height="">
<tr height="">
<tr height="">
<tr>
<tr>
<tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</center>
</div>
</td>
</tr>
<tr>
<tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
</frame>
<frame id="Script" scrolling="Yes" frameborder="0" noresize="">
</frameset>
</html>

5 个答案:

答案 0 :(得分:1)

您需要使用ancestor代替preceding

//font[text()='Internet Users']/ancestor::tr[1]/td/input[@type='Radio']

这也是一个更好的做法,告诉你想要哪一个tr - 祖先 - &gt; [1] - 因为你想要第一个直接祖先

您是否有理由不使用单选按钮的ID?

WebElement wElement = wDriver.findElement(By.Id("optProfile"));

答案 1 :(得分:0)

您可以使用以下XPath

//tr[.//font[text()='Internet Users']]//input[@id='optProfile']

此xpath会查找包含tr标记的font,其中包含文字&#34;互联网用户&#34;然后使用id =&#39; optProfile&#39;

导航到输入标记

答案 2 :(得分:0)

您可以使用preceding,如下所示 -

By.xpath("//font[contains(text(),'Internet Users')]/preceding::input[@id='optProfile']")

答案 3 :(得分:0)

我会尝试这样的事情

List<WebElement> trs = driver.findElements(By.cssSelector("table > tr"));
for (WebElement tr : trs)
{
    List<WebElement> fonts = tr.findElements(By.tagName("font"));
    if (!fonts.isEmpty() && fonts.get(0).getText().trim().equals("Internet Users"))
    {
        tr.findElement(By.id("optProfile")).click();
        break;
    }
}

您没有在HTML代码段中显示TABLE标记,因此您可能需要在初始CSS选择器中更具体。基本上,这段代码循环遍历TR寻找&#34;互联网用户&#34;在FONT标记中。找到后,单击带有id=optProfile的单选按钮。

如果您要在HTML代码段中发布TABLE标记,我可以帮助使用CSS选择器。

修改1:更改了代码,以解决某些TR不包含FONT标记的情况。

答案 4 :(得分:0)

感谢大家的帮助。我真的很感激。它使用下面的代码

WebElement trs = GlobalVar.wDriver.findElement(By.xpath("//font[text()='Internet Users']/ancestor::tr[1]"));
        trs.findElement(By.id("optProfile")).click();