我正在使用关键字驱动和数据驱动框架。 预期字符串来自excel表和实际来自网页 即使两个变量都打印完全相同的字符串仍然测试脚本失败。 对于没有空格的字符串,如“辞职”,它会“通过”,但对于带有“物业搜索”的空格的字符串,它会“失败” 下面是打印PASS直到“Resign”失败后的结果 忽略它用于调试的数字。 我还在结果中包含了xpath。
生成结果
By.xpath:html / body / div [2] / div / div [2] / ul / li [1] / ul / li [1]
提供工具提示文字: - Revals
Revals
1
By.xpath:html / body / div [2] / div / div [2] / ul / li [1] / ul / li [2] / a [contains(text(),'Managed Client Accounts')] <登记/>
提供工具提示文本: - 托管客户帐户
托管客户帐户
1
By.xpath:html / body / div [2] / div / div [2] / ul / li [1] / ul / li [3]
出现工具提示文字: - 辞职
辞职
1
By.xpath:.// [@id='dashboard-dropdown']/li[4]/a
提供工具提示文字: - 杰出的AR
优秀AR
4
By.xpath:.//[@id='menuCreateDashboard']
提示工具提示文字: - 管理仪表板
管理控制台
4
By.xpath:html / body / div [2] / div / div [2] / ul / li [2] / a
提供工具提示文字: - 物业搜索
房产搜索
4
By.xpath:html / body / div [2] / div / div [2] / ul / li [3] / a
提供工具提示文本: - 税务资源数据库
税务资源数据库
4
By.xpath:html / body / div [2] / div / div [2] / ul / li [4] / a [包含(text(),'Quick Links')]
提供工具提示文字: - 快速链接
快速链接
4
这是代码:
public String verify_Text(String locatorType, String value, String data){
try
{
By locator;
locator = locatorValue(locatorType, value);
System.out.println(locator);
WebElement element = driver.findElement(locator);
//WebElement element = driver.findElement(By.cssSelector("#header>h1 a"));
// Get tooltip text
String toolTipText = element.getText();
System.out.println("Tool tip text present :- " + toolTipText);
System.out.println(data);
// Compare toll tip text
if(toolTipText.contentEquals(data))
{
System.out.println("1");
return PASS;
}
}
catch(Exception e)
{
LOG.error(Executor.currentSheet + ":" + e);
getScreenshot("verify_Link", data);
System.out.println("3");
return FAIL;
}
getScreenshot("verify_Link", data);
System.out.println("4");
return FAIL;
}
答案 0 :(得分:1)
为我工作的代码行
if(toolTipText.replaceAll("\\s+","").equalsIgnoreCase(data.trim().replaceAll("\\s+","")))
我意识到在使用这段代码后调试是从excel表传递的数据在两个字母之间有空格,而webelement工具提示上没有空格。但是这个我无法使用inspect元素弄清楚它是不可见的。 在使用replaceall之前(&#34; \ s +&#34;,&#34;&#34;)
By.xpath:html / body / div [2] / div / div [2] / ul / li [1] / ul / li [5] / a 提供工具提示文字: - ManageDashboard 管理仪表板
使用replaceAll(&#34; \ s +&#34;,&#34;&#34;)并从excel表格中删除数据空间
By.xpath:html / body / div [2] / div / div [2] / ul / li [1] / ul / li [5] / a 提供工具提示文字: - ManageDashboard ManageDashboard
答案 1 :(得分:0)
我没有足够的评论来评论,但我建议尝试一些事情:
你可以修剪字符串,也许有一个字符串在其中一个字符串中不可见。
if(toolTipText.trim().contentEquals(data.trim()))
或者您可以尝试使用 normalize-space 来删除制表符,回车符和换行符。
/*/a[normalize-space() = 'Hello World']
答案 2 :(得分:0)
有时,当您从WebElements获取文本时,它们往往会在其中包含前导或尾随空格。更好的比较是
toolTipText.trim().equals(data.trim())
如果这仍然不起作用,可以从字符串中删除所有空格然后进行比较。像这样:
toolTipText = toolTipText.trim().replaceAll("\\p{Z}", "");
data = data.trim().replaceAll("\\p{Z}", "");
toolTipText.equals(data)
此处,字符Outstanding AR
将在OutstandingAR
之后变为replaceAll
。这当然是一种矫枉过正,但如果它有效,那么很明显,字符串中的空格是导致问题的原因。
答案 3 :(得分:0)
在我看来,你的功能试图做得太多,而且对于你想要完成的简单任务来说过于复杂。我认为至少部分问题在于您使用的是contentEquals()
而不是equals()
。
您正在使用Java。有一个很棒的库可以处理你想要用它做的所有不同的比较,称为JUnit。使用它来进行比较并清理代码,您可以使用如下代码。
String expectedTooltip = "some value from Excel";
By locator = By.cssSelector("#header > h1 a");
getScreenshot("verify_Link", expectedTooltip);
Assert.assertEquals("verify tooltip", expectedTooltip, getTooltip(locator));
和一个支持函数,它只从定位器指定的元素中获取工具提示。您不想传递字符串并将其转换为定位器。请改用By
类。它使事情变得更简单。我在这里添加了.trim()
以消除字符串两端的任何非预期空格。
public String getTooltip(By locator)
{
return driver.findElement(locator).getText().trim();
}
如果您仍然遇到字符串不匹配的问题,那么在执行比较之前,您必须删除/替换某些字符串中可能存在不可打印的字符。解决这个问题的一种方法是遍历每个字符串并打印每个字符的ASCII值,并查看差异的位置。