【问题标题】:Selenium Java - list element contains partial text within unordered listSelenium Java - 列表元素包含无序列表中的部分文本
【发布时间】:2015-10-26 06:06:13
【问题描述】:

如何为

添加“starts-with”或“contains”
(By.xpath("//ul/li[1]")));

类似

(By.xpath("//ul/li[1][contains(text(),'"+textConstant+"')]")));  

这不起作用

任何人都可以为此提供正确的格式吗?谢谢

【问题讨论】:

标签: java selenium text element contains


【解决方案1】:

如果只有一个 li 标签包含该文本,则无需提及索引。

你可以这样写:

By locator = By.xpath("//ul/li[contain‌​s(., '"+lostText+"')]");
WebElement errorFind = (new WebDriverWait(mypackage.ClassMain.driver, 15)).until(ExpectedConditions.presenceOfElementLocated(locator));
String text = mypackage.ClassMain.driver.findElement(By.xpath("//ul/li[1]")).getText(); 
if(text.equals("Lose") {
   doNext(); 
} else {
   System.out.print("Win \n"); 
   doOther();
}

【讨论】:

  • 多个li标签包含此文本,需要最新或最顶层的li
  • 并非如此。最上面的 li 通过 Node 应用程序将 div 从一种活动/可见状态更改为一种不可见状态。我需要短时间出现在顶部的 li 包含文本,然后将其存储在底部,标识为相同的 li,并包含相同的文本。看起来我需要包含索引以及[contains(.,'"+textConstant+"')]
  • 你可以得到 top lost li 比如:By.xpath("//ul/li[1]")。然后检查是否启用了 webElement。无需检查文本,因为有时可能不会将文本列在列表中……对吗?如果它包含文本,那么我猜这将处于启用模式。
  • 出现的索引可能包含 2 个不同的文本短语。这就是为什么我从一个短语中挑选部分文本,并说“如果找不到,那就是另一个”(不能使用整个文本短语匹配)
  • 这样就可以了。你有什么错误吗?如果不起作用意味着可能有其他具有相同 xpath 的 web 元素。那时你可以从'ul'的父标签中选择你的xpath
【解决方案2】:

如果 textConstant 在 li 标签内,那么你可以按以下方式编写:-

(By.xpath("//ul/li[contains(.,'"+textConstant+"')]));

在这里,点。代表文本()

【讨论】:

  • 马上我看到你错过了结尾的报价。不敢尝试这个,因为不确定它是否会击中第一个实例,或者当出现更多相同的“li”时会感到困惑
  • 正确,错过了结尾引用:- (By.xpath("//ul/li[contains(.,'"+textConstant+"')]"));您使用的 textConstant 字符串绝对是唯一的..对吗?如果是,那么它将仅搜索包含字符串 textConstant 的“li”。
【解决方案3】:

您可以对 Xpath 使用 AND 运算符。

//ul/li[position()=1 and contains(text(),'"+textConstant+"')]

这将匹配包含文本常量值的最顶部的 li 标记。

【讨论】:

  • 你的回答是一个没有给我“表达不是合法表达”的答案。尽管未在原始帖子中列出,但您认为该文本不是唯一的,我需要最顶部的 li 标签,因此我会指出您的观点。谢谢。
猜你喜欢
  • 2013-07-06
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2017-07-31
  • 2022-08-19
相关资源
最近更新 更多