麻烦定位元素

时间:2015-10-26 13:04:43

标签: java eclipse selenium xpath

我正在测试一个应用程序,在应用程序中有一个包含复选框的表(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。

2 个答案:

答案 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; }}