3

我已经在这方面工作了一段时间了。我正在使用 Selenium 和 WebDriver 2.33 版(适用于所有浏览器)。我正在使用Java,它应该是任意的。我正在做的只是找到一个元素并将鼠标悬停在它上面,我在之前的代码中已经这样做了。但由于某种原因,我无法让这个工作。我正在尝试使用此 xpath 获取一个元素,通过在 Chrome 中右键单击 HTML 中的元素并单击“复制 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 的图片,因为我无法掌握实际的文本:

更新的 HTML 链接:http: //i1250.photobucket.com/albums/hh527/dr4g1116/Capture_zps6e2bc1b9.png

有人对我有什么建议吗?请让我知道我做错了什么!

谢谢!!

4

4 回答 4

2

试试看CSS Selectors

By by = By.css('div[id^="highcharts"] g[class^="highcharts"] > g > rec')

g.class_name我用过,因为<g>标签类名是不可见的。将该类名替换为正确的类名

于 2013-06-27T19:35:03.190 回答
1

我只是想对此稍作更新。似乎 selenium 看不到 SVG 标签,所以话虽如此,我需要找到一种方法来查看它们……如果我能找到方法,我会报告回来。

谢谢大家!

于 2013-08-08T19:40:24.020 回答
0

从您与 Amey 的讨论中,我推断您只有一张高图。所以尝试使用类名直接搜索元素“highcharts-tracker”,即 By.ClassName("highcharts-tracker"),然后将鼠标悬停在该元素本身上。这正是您想要实现的目标。

于 2013-06-29T18:43:18.510 回答
0

Sorry just seeing your comment on my earlier answer. You can get the values for each bar in barchart by following way:

var barValues = new List<string>(); 
var actions = new Actions(webDriver); //webDriver is instance of selenium WebDriver.
var chartSeriesGroup = webDriver.FindElement(By.ClassName("highcharts-series-group"));
var chartSeries = chartSeriesGroup.FindElement(By.ClassName("highcharts-series"));
var rectTags = chartSeries.FindElements(By.TagName("rect")); //To get all bars in barchart.

foreach (var rect in rectTags)
{
   actions.MoveToElement(rect).Perform(); //Hover mouse on bar.
   var trendMarkers = webDriver.FindElement(By.ClassName("highcharts-tooltip"));
   barValues.Add(trendMarkers.Text); //Storing tooltip value of bar for later use.
}

I am using same method in my current project for getting values of bars in bar chart. Hope this will help you.

Note : If tooltip for bar shows other information e.g.name etc along with value then you need to write logic for extracting the value part from the complete information stored in barValues.

于 2013-07-05T18:58:26.920 回答