当您将鼠标悬停在按钮上时,我无法验证其动态生成html代码的工具提示文本。以下是我正在尝试处理的页面的链接:
http://www.globalsqa.com/demoSite/practice/tooltip/video-player.html
我已经尝试了很多东西并搜索了许多论坛,但没有任何帮助我获取工具提示的文本,这是第一件事。 另一个是,有一个角色作为日志,当你将鼠标悬停在按钮上时,它会不断累加工具提示的文本值。当第一件事失败时,我在那部分工作。这是我的代码,它只是获取最后一个悬停按钮的文本值,休息空字段!
Actions builder = new Actions(driver);
WebElement a1 = driver.findElement(By.xpath("/html/body/div/span/button[@title='I like this']"));
WebElement a2 = driver.findElement(By.xpath("/html/body/div/span/button[@title='I dislike this']"));
WebElement a3 = driver.findElement(By.xpath("/html/body/div/div/button[@title='Add to Watch Later']"));
WebElement a4 = driver.findElement(By.xpath("/html/body/div/div/button[@title='Add to favorites or playlist']"));
WebElement a5 = driver.findElement(By.xpath("/html/body/div/button[@title='Share this video']"));
WebElement a6 = driver.findElement(By.xpath("/html/body/div/button[@title='Flag as inappropriate']"));
builder.moveToElement(a1).moveToElement(a2)
.moveToElement(a3).moveToElement(a4)
.moveToElement(a5).moveToElement(a6)
.perform();
Thread.sleep(2000);
List<WebElement> element = driver.findElements(By.xpath("/html/body/div[@role='log']/div"));
System.out.println(element.size());
for(WebElement ele : element)
System.out.println(ele.getText());
如果有人认为单独调用每个按钮的moveToElement并且在移动之间使用Thread.sleep()可以工作,我已经尝试但是没有工作! 具体来说,当你将鼠标悬停在它们上面时,我想要所有6个按钮的工具提示文本值。 Selenium版本(3.0.1),浏览器(Chrome:版本55.0.2883.87 m)
添加:这是div标签的构建方式,附加html代码:
<div role="log" aria-live="assertive" aria-relevant="additions" class="ui-helper-hidden-accessible"><div style="display: none;">I like this</div><div style="display: none;">I dislike this</div><div style="display: none;">Add to Watch Later</div><div style="display: none;">Add to favorites or playlist</div><div style="display: none;">Share this video</div><div>Flag as inappropriate</div></div>
<div style="display: none;">I like this</div>
<div style="display: none;">I dislike this</div>
<div style="display: none;">Add to Watch Later</div>
<div style="display: none;">Share this video</div>
<div style="display: none;">Add to Watch Later</div>
<div>Flag as inappropriate</div>
答案 0 :(得分:0)
getText()
只获取元素的可见文本,因此除非您获取文本时所有工具提示仍然可见,否则只有最后一个工具提示会为您提供文本 - 这就是您所看到的内容。 / p>
你可以做些什么来解决这个问题,就是在每个元素上执行javascript并获得textContent
属性。当弹出窗口仍然可见时,或者在每次移动后获取文本
答案 1 :(得分:0)
谢谢卢卡斯。我以前避免使用迭代元素,但它使用了以下代码。您可以看到我仍然没有使用工具提示元素,而是使用带有角色作为日志的div标记作为我的值。我也会尝试使用javascript并给出答案。这是前两个按钮的代码,如果有人需要参考:
builder.moveToElement(a1).perform();
List<WebElement> element = driver.findElements(By.xpath("/html/body/div[@role='log']/div"));
System.out.println(element.get(element.size()-1).getText());
builder.moveToElement(a2).perform();
element = driver.findElements(By.xpath("/html/body/div[@role='log']/div"));
System.out.println(element.get(element.size()-1).getText());
答案 2 :(得分:0)
我正在Chrome控制台中检查网页的HTML,因为我没有编写代码,所以我想确保工具提示出现(正如我问你的那样)。
tooltip元素的定位器可以是以下XPath(您可以使用类似$x("//your/xpath/here")
的内容在Chrome控制台中进行检查:
"//div[@role='tooltip']"
考虑到动态添加此元素时,选择器仅在工具提示可见时才起作用;只要移动指针,工具提示消失,该元素也会从页面中删除,并且该定位器不起作用。
所以你的代码应该是这样的:
builder.moveToElement(a1).perform();
String tooltipText = driver.findElement(By.xpath("//div[@role='tooltip']")).getText();
在这种情况下,更好地使用By
而不是WebElement
,因为该元素是动态创建和销毁的。
让我知道它是否有效,希望它有所帮助。