我正在测试一个应用程序,在应用程序中有一个包含复选框的表(3行,x列)。下面是该表(1row)部分的html。我正在尝试单击其中一个项目的文本,以根据文本选择或取消选中复选框。例如,我想点击文本'nr 8复选框旁边的文字'以选择该文本框。但是,我不想使用像/ table / tbody / tr [2] / td [2] / div / span)[2]之类的代码通过硬xpath去那里,而是基于文本。我正在尝试类似下面的代码,但它们似乎不起作用:
driver.findElement(By.xpath("(//*[@class='settingsPanelTD' and text()='Text next to checkbox for nr 8']")).click();
driver.findElement(By.xpath("(//*[@class='settingswidgetTitle' and text()='Text next to checkbox for nr 8']")).click();
driver.findElement(By.xpath("(//*[@class='settingswidgets' and text()='Text next to checkbox for nr 8']")).click();
我想为最终的xpath创建一个字符串,因此您只需要更改要单击以更改测试的文本,例如:
String text = "Text next to checkbox for nr 8"; /** variable text based on what you want to click */
String locator = "//*[@class='settingswidgets' and text()='";
String xpathitem = locator + text + "']";
driver.findElement(By.xpath(xpathitem)).click();
这是HTML:
<td class="settingsPanelTD" width="33%">
<div class="settingwidgetsTitle">
<input id="widgetsettings8" class="settingwidgets" type="checkbox" alt="2">
<span>Text next to checkbox for nr 8</span>
<a class="AddWidget" href="#"></a>
</div>
</td>
<td class="settingsPanelTD" width="33%">
<div class="settingwidgetsTitle">
<input id="widgetsettings9" class="settingwidgets" type="checkbox" alt="2">
<span>Text next to checkbox for nr 9</span>
<a class="AddWidget" href="#"></a>
</div>
</td>
<td class="settingsPanelTD" width="33%">
<div class="settingwidgetsTitle">
<input id="widgetsettings9" class="settingwidgets" type="checkbox" alt="2">
<span>Text next to checkbox for nr 10</span>
<a class="AddWidget" href="#"></a>
</div>
</td>
我正在使用eclipse,Selenium和Java。
答案 0 :(得分:1)
您使用的XPath不正确。您使用的第三个XPath最接近正确的解决方案:
MEDS:
load * inline [
FROM, TO, QTY
Pharm, 3rd, 1
Pharm, 1st, 2
Pharm, 2nd, 3
2nd, Pharm, 45
3rd, Pharm, 6
1st, Pharm, 76
3rd, Pharm, 53
];
LOCS:
load distinct
FROM as LOC1,
TO as LOC2
resident MEDS;
简单来说,您的XPath意味着 - 在文档中查找//*[@class='settingswidgets' and text()='Text next to checkbox for nr 8']
且文本等于class="settingswidgets"
的任何元素。不幸的是,不存在这样的元素。
您可以使用的一个潜在XPath是:
Text next to checkbox for nr 8
这将搜索具有相应文本的任何//span[text()="Text next to checkbox for nr 8"]
元素。
然后你可以使用:
span
这应该会产生所需的点击。
答案 1 :(得分:0)
我没有足够的声誉来添加评论 但如果您无法通过单击Span标签选择选项,则需要单击输入标签
ArrayList<WebElement> al=new ArrayList<WebElement>();
driver.findElements(By.className("settingwidgetsTitle"));
for(int i=0;i<al.size();i++){
if(driver.findElement(By.xpath(".//div[@class='settingwidgetsTitle']/span")).getText().equals("Option to Select")){
driver.findElement(By.xpath(".//div[@class='settingwidgetsTitle']["+i+"]
/input").click());
break;
}}