Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何基于标签文本在多个框中选择单个复选框_Java_Selenium_Xpath_Checkbox_Label - Fatal编程技术网

Java 如何基于标签文本在多个框中选择单个复选框

Java 如何基于标签文本在多个框中选择单个复选框,java,selenium,xpath,checkbox,label,Java,Selenium,Xpath,Checkbox,Label,您好,我正在尝试自动化一个场景,其中使用城市名称启动搜索,这将为我提供城市中可用的测试中心列表,并带有复选框以选择所需的测试中心。我尝试了很多方法,但未能根据标签文本中可用的“Post code”选择测试中心 有两个测试中心(testCenter_1和testCenter_2),如下代码所示,每个测试中心都有一个复选框,其地址显示在标签标签中。我试图根据标签标签中的邮政编码(HP19 8GJ)定位并选择测试中心2 <div class="container">

您好,我正在尝试自动化一个场景,其中使用城市名称启动搜索,这将为我提供城市中可用的测试中心列表,并带有复选框以选择所需的测试中心。我尝试了很多方法,但未能根据标签文本中可用的“Post code”选择测试中心

有两个测试中心(testCenter_1和testCenter_2),如下代码所示,每个测试中心都有一个复选框,其地址显示在标签标签中。我试图根据标签标签中的邮政编码(HP19 8GJ)定位并选择测试中心2

<div class="container">
        <div class="row">
            <div class="col-md-7 col-sm-12">
                <div id="testCenterList">
                    <div style="visibility:hidden;">
                    </div>
     <table cellspacing="0" id="centerTable">
       <caption class="access">This table lists the test centres closest to the area that searched      </caption>         
                        <thead>…</thead>
                        <tbody id="testCenterListTable">
                            <tr id="testCenter_1" class="group0">
                                    <td class="selectRow  displayDesktopOnlyView" scope="row">
<input id="selectedTestCenters:1" type="checkbox" name="selectedTestCenters" value="48958">
<label for="selectedTestCenters:1" class="access">&nbsp;Pearson Centre - 9 Lloyds Street Northampton NN1 2NP</label>                                        
                                    </td>
</tr>
<tr id="testCenter_2" class="group0">
                                    <td class="selectRow  displayDesktopOnlyView" scope="row">
<input id="selectedTestCenters:2" type="checkbox" name="selectedTestCenters" value="79312">
<label for="selectedTestCenters:2" class="access">&nbsp;Pearson Centre - 5 Smeaton Close Aylesbury HP19 8GJ</label>
                                    </td>
                                <td>
</tr>

要根据标签文本定位测试中心2并选中复选框,我在下面的行中使用了,但它给了我ElementNotInteractiableException

driver.findElement(By.xpath("//*[@id='testCenterListTable']/tr[2]/td/label[contains(text(),'HP19 8GJ')]")).click();
有什么建议吗


如@pburgr建议的那样,提前感谢您,使用
元素可禁用
条件是选项之一。另外,如果以
输入
元素为目标,而不是
标签
可能会更好。您可以相应地修复XPath:

//label[contains(text(),'HP19 8GJ')]/preceding::input[1]
如果前面的选项不起作用,请使用JSE单击元素:

WebElement ele = driver.findElement(By.xpath("//label[contains(text(),'HP19 8GJ')]/preceding::input[1]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);
编辑

如果要在所有测试中心内搜索,可以使用以下XPath之一(使用
/
[*]
检查每个
tr
元素):


将html代码作为文本,以便我们可以测试它。不要使用图像。请阅读为什么使用图像。考虑使用格式化的基于文本的相关HTML、代码试验和错误堆栈跟踪更新问题。谢谢@ Alxyr。还有DebanjanB,我很感谢你对代码的建议。当我复制元素或外部html时,它返回1000多行。因此,除了一个测试中心外,我删除了所有测试中心标记中的内容。请让我知道问题中包含的代码是否正常?html代码中没有选择或复选框。你能详细说明你的问题是什么吗?添加您的代码、预期行为和当前行为/异常。感谢@pburgr对此进行调查。我现在更新了问题和代码,以使其更清晰。请看一看,让我知道它是否仍然缺少任何细节。太好了!!这对我有用。非常感谢@E.Wiest。早些时候,我试图通过定位输入标记来单击该框,但失败了,因为文本位于标签中。我以前从未遇到过前面的选项。然而,我的问题只解决了一半。邮政编码并不总是出现在同一位置,它可能出现在列表的第一位或第五位。因此,我可以使用任何替代选项来查看具有给定文本的所有测试中心,而不是直接在这一行中以第二个测试中心(tr[2])为目标吗<代码>xpath(“//*[@id='testCenterListTable']/tr[2]/td/label[contains(text(),'HP19 8GJ')]/previous::input[1]”
确定。如果要在所有测试中心内搜索,可以使用以下XPath之一(使用
//
[*]
检查每个
tr
元素):
//*[@id='testCenterListTable']///tr/td/label[contains(text(),'HP19 8GJ')]/previous::input[1]
/*[@id='testCenterListTable']/tr[*]/td/label[contains(text()),'HP19 8GJ')]/previous::input[1]
。完美!这就是我要找的。谢谢:)很高兴我能帮忙。评论已添加到我原来的帖子中。如果你的问题解决了,请随意将其标记为已接受。
WebElement ele = driver.findElement(By.xpath("//label[contains(text(),'HP19 8GJ')]/preceding::input[1]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);
//*[@id='testCenterListTable']//tr/td/label[contains(text(),'HP19 8GJ')]/preceding::input[1]

//*[@id='testCenterListTable']/tr[*]/td/label[contains(text(),'HP19 8GJ')]/preceding::input[1]