使用Selenium Webdriver(java)单击SPAN标记之间的文本

时间:2014-03-03 12:34:25

标签: java selenium html

HTML代码如下所示:

<td id="id26a" class="doclisting-name link" style="width: 319px; min-width: 319px;"> 

<span id="id26b" title="Document">
<span class="ie-fallback-marker">
  words

</span></span></td>

我无法搜索元素ID,因为它一直在变化。我无法搜索元素的类,因为有多个可能会改变位置。

我希望能够点击&#34; WORDS&#34; 介于 SPAN标记之间。这有可能吗?

这是我到目前为止使用的,但似乎都不起作用:

//string document is words.
   public void testscenario123(String document)      throws Throwable {
    Thread.sleep(3000);
    driver.findElement(By.linkText(document)).click();
}

  //string document is words.
 public void testscenario124(String document) throws Throwable {
    Thread.sleep(3000);
    driver.findElement(By.xpath("//*[contains(@span,'"+document+"')]")).click();
}

5 个答案:

答案 0 :(得分:5)

您可以通过文本选择xpath,normalize-space将剥离空格:

  //string document is words.
 public void testscenario124(String document) throws Throwable {
    Thread.sleep(3000);
    driver.findElement(By.xpath("//*[normalize-space()='"+document+"']")).click();
}

您可能还希望考虑等待元素出现,而不是声明明确的睡眠

答案 1 :(得分:3)

我怀疑该元素出现的时间超过3秒。因此抛出以下异常。

  

元素目前不可见,因此可能无法与

进行交互

为避免此异常,必须使用implicit or explicit wait

new WebDriverWait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., \"" + document + "\")]"))).click();

正如RobbieWareham所说,即使我有兴趣了解更多有关此事的信息waiting makes a ridiculous piece of code?

通过Selenium Webdriver,我们只是试图模仿用户的工作方式。即使他/她必须等待元素出现以执行某些操作。

答案 2 :(得分:1)

尝试使用:

driver.findElement(By.xPath("//span[starts-with(., \"" + document + "\")]")).click();

它对我有用! 如果您想检查中间的某些文本,请尝试:

driver.findElement(By.xPath("//span[contains(., \"" + document + "\")]")).click();

答案 3 :(得分:1)

我认为没有理由说明xpath不能正常工作

driver.findElement(By.xpath("//span[contains(text(), \"" + document + "\")]"));

此外,您可能需要输入字符串为常量

//string document is words.
   public void testscenario123(final String document)      throws Throwable {

如果你要获得ElementNotVisibleException,那么检查你的定位器是否正在返回正确的元素,也许还有另一个<span>元素,其中包含document变量中的文本。

答案 4 :(得分:-2)

我们可以使用xPath来查找这样的元素,因为文本位于span标记内。以下是代码段...

WebElement elmnt=driver.findElement(By.xpath(".//*[@id='MainLayout']/div/div[2]/div/div/div[3]/div/div[2]/div/div/div/div/div[2]/div/div/div[2]/div/div[2]/div/div/div[3]/div/div[2]/div/div/div[1]/div/div/div/div/div/div[4]/span/span"));

elmnt.click();