我已经在这工作了一段时间了 . 我正在使用Selenium和WebDriver版本2.33(包含所有浏览器) . 我正在使用Java,它应该是任意的 . 我正在做的只是找到一个元素并将鼠标悬停在它上面,这是我在之前的代码中所做的 . 但由于某种原因,我不能让这个工作 . 我正在尝试使用此xpath获取一个元素,通过右键单击Chrome中HTML中的元素并单击“copy xpath”获得:
//*[@id="highcharts-10"]/svg/g[7]/g/rect[1]
这就是我试图获取元素的方式(由于“highcharts-10”动态变化):
//*[starts-with(@id, 'highcharts')]/svg/g[7]/g/rect[" + barOption + "]
barOption正确输入(我正试图通过一堆酒吧)
这是我的Java代码:
WebDriverWait wait = new WebDriverWait(getWebDriver(), 5);
WebElement element;
WebDriver driver = getWebDriver();
By by = By.xpath("//*[starts-with(@id, 'highcharts')]/svg/g[7]/g/rect[" + barOption + "]");
Actions action = new Actions(driver);
WebElement elem = wait.until(ExpectedConditions.visibilityOfElementLocated(by));
action.moveToElement(elem);
action.perform();
我在这做什么不正确?我尝试过使用switchTo()语句,但是没有iframe可以正确切换到 . 这是HTML的图片,因为我无法得到实际文本:
UPDATED HTML LINK: http://i1250.photobucket.com/albums/hh527/dr4g1116/Capture_zps6e2bc1b9.png
有人对我有什么建议吗?请让我知道我做错了什么!
谢谢!!
4 回答
试试CSS Selectors:
g.class_name
我用过,因为<g>
标签的类名不可见 . 用适当的类名替换该类名 .从你与Amey的讨论中我推断出你只有一个高图 . 所以尝试使用类名直接搜索元素“highcharts-tracker”,即By.ClassName(“highcharts-tracker”),然后将鼠标悬停在此元素本身上 . 这将完全符合您的要求 .
很抱歉只是看到你对我之前的回答的评论 . 您可以通过以下方式获取条形图中每个条形的值:
我在当前项目中使用相同的方法来获取条形图中的条形值 . 希望这会帮助你 .
注意:如果bar的工具提示显示其他信息,例如名称等以及值,则需要编写逻辑以从存储在barValues中的完整信息中提取值部分 .
我只是想对此稍作更新 . 似乎selenium无法看到过去的SVG标签,所以说到这里,我需要找到一种方法来看看它们......如果我能够找到方法,我会报告回来 .
谢谢大家!