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

使用SeleniumWebDriver(java)单击SPAN标记之间的文本,java,selenium,html,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> 或 尝试使用以下方法: driv

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>

尝试使用以下方法:

driver.findElement(By.xPath("//span[starts-with(., \"" + document + "\")]")).click();
这对我有用! 如果您想检查中间的一些文本,请尝试:

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

您可以通过文本选择xpath,规范化空格将删除空白:

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

您也可以考虑等待元素出现,而不是声明一个显式的睡眠

,我看不出为什么XPath不能工作

的原因。
driver.findElement(By.xpath("//span[contains(text(), \"" + document + "\")]"));
此外,您可能需要输入字符串为常量

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


如果要获取
元素NotVisibleException
,请检查定位器是否返回正确的元素,可能存在另一个
元素,其中包含
文档
变量中的文本。

我怀疑该元素的显示时间超过了3秒。因此引发了以下异常


元素当前不可见,因此可能无法与之交互

为避免此异常,必须使用

new WebDriverWait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., \"" + document + "\")]"))).click();
正如RobbieWareham所提到的,就连我也有兴趣了解更多这方面的信息。
等待是一段荒谬的代码?


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

我们可以使用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(); 

元素当前不可见,因此可能无法与之交互。不幸的是,它不起作用:/也没有帮助不幸的是。。。关于睡眠,我也考虑过,但是waitforelementpresent导致了一段荒谬的代码。我们还有一个DoD,它声明页面需要在3秒内加载…啊,刚刚意识到,您需要将xpath更改为//span[contains(@class,'ie fallback marker')和normalize-space()='words']。我还对为什么等待会产生一段“荒谬的代码”感兴趣?这已经足够令人窒息了,这就成功了!万分感谢!只是好奇一件事:“words”没有任何白色,那么为什么元素需要“删除白色”?它被白色空格包围实际上,这是一个打字错误。。。真正的代码周围没有空格,但您的解决方案不知怎么做到了:)您得到了什么错误?元素当前不可见,因此可能无法与之交互。和以前一样。我认为可能是程序没有响应正确的代码,而不是给出的解决方案……好吧,它在所有其他页面上都能工作,所以这是一个修复:)谢谢。现在我只需要点击一些隐藏的东西,我会立即尝试和研究。我必须使Hippo CMS自动化。它的左侧有一个基本的地图结构。单击某个目录会在主框架上打开文档列表。在该框架中,我希望selenium单击某种类型的文档。当我在脚本停止时检查元素时,它不会显示可单击的链接,但会在屏幕上显示。我相信Hippo CMS是由javascript和小部件生成的,它们只是.so.awefull。
new WebDriverWait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., \"" + document + "\")]"))).click();
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();