我正在测试一个应用程序,在应用程序中有一个包含复选框(3行,x列)的表。下面是这个表的一部分(1行)的html。我试图单击其中一个项目的文本,以便根据文本选择或取消选中复选框。因此,例如,我想点击文本‘文本旁边的复选框nr 8’,以选择那个文本框。但是,我不想使用/table/tbody/tr2/td2/div/span等代码通过硬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。
发布于 2015-10-26 13:11:22
您使用的XPaths是不正确的。您使用的第三个XPath最接近正确的解决方案:
//*[@class='settingswidgets' and text()='Text next to checkbox for nr 8']
在简单的英语中,XPath的意思是-查找文档中的任何元素,其class="settingswidgets"
和文本等于Text next to checkbox for nr 8
。不幸的是,这种因素不存在。
您可以使用的一个潜在的XPath是:
//span[text()="Text next to checkbox for nr 8"]
这将搜索具有适当文本的任何span
元素。
然后,您可以使用:
String text = "Text next to checkbox for nr 8";
String locator = "//span[text()='";
String xpathitem = locator + text + "']";
driver.findElement(By.xpath(xpathitem)).click();
这应该会产生所需的单击。
发布于 2015-10-26 13:51:55
我没有足够的声誉添加注释,但如果您无法通过单击Span标记来选择选项,则需要单击input标记
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;
}}
https://stackoverflow.com/questions/33346517
复制相似问题