如何使用Selenium Webdriver在HTML的上面一行找到类名

时间:2015-03-24 05:05:25

标签: java html selenium selenium-webdriver webdriver

我在下面有以下HTML代码:

<!-- language: lang-html -->
<td class="Schedule-col details">
<td class="Schedule-col timeslots">
<div class="timeslots-container" style="opacity: 1; visibility: visible;">
<div class="timeslot d1422270000000 row0 col0 outside" data-time="1422270000000" style="width: 3.22581%;">
<div class="timeslot d1422356400000 row0 col1 outside" data-time="1422356400000" style="width: 3.22581%;">
<div class="timeslot d1422442800000 row0 col2 outside" data-time="1422442800000" style="width: 3.22581%;">
<div class="timeslot d1422529200000 row0 col3 outside" data-time="1422529200000" style="width: 3.22581%;">
<div class="timeslot d1422615600000 row0 col4 outside" data-time="1422615600000" style="width: 3.22581%;">
<input class="row0 col4 widget" type="text" autocomplete="off">
</div>
<div class="timeslot d1422702000000 row0 col5 current" data-time="1422702000000" style="width: 3.22581%;">
<input class="row0 col5 widget" type="text" autocomplete="off">
</div>

基本上我想找到class="row0 col5 widget"的元素,在找到之后,我想在该HTML中找到一个级别并找到<div class="timeslot d1422702000000 row0 col5 current",然后检查类值是否包含{{1} }或current

使用Webdriver我编写此代码,我可以找到该元素。

outside

使用此代码我可以找到元素int ColIndex=5; int RowIndex=0; WebElement pointer = driver.findElement(By.cssSelector(".row"+RowIndex+".col1"+ColIndex+".widget")); String xx=pointer.getAttribute("class"); System.out.println(xx); ,但我不知道如何上升一级并找到<input class="row0 col5 widget" type="text" autocomplete="off">并检查它是否包含<div class="timeslot d1422702000000 row0 col5 current"

我无法直接找到current因为数字timeslot d1422702000000 row0 col5 current是由系统随机生成的。据我所知,我们无法在d1422702000000中使用contains

有什么建议吗?谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用//div[input[@class='row0 col5 widget']] XPath表达式:

WebElement div = driver.findElement(By.xpath("//div[input[@class='row0 col5 widget']]"));
String xx = div.getAttribute("class");

该表达式将与div个具有input子项的class="row0 col5 widget"元素匹配。

当然还有其他选择。例如,继续您的开始:

WebElement pointer = driver.findElement(By.cssSelector(".row"+RowIndex+".col1"+ColIndex+".widget"));
WebElement div = pointer.findElement(by.xpath(".."));
String xx = div.getAttribute("class");

其中..将转到直接父级。

答案 1 :(得分:1)

您可以使用XPath轴并使用父轴向上移动一级。链接:

http://www.w3schools.com/xpath/xpath_axes.asp

如果页面使用jQuery,您也可以这样做:

$(this).parent().attr('class');

答案 2 :(得分:0)

我只是使用xpath表达式来显式检索你想要获得的元素。

driver.findElement(By.xpath("//div[contains(@class, 'timeslot')][contains(@class, 'row" + RowIndex + "')][contains(@class, 'col" + ColIndex + "')]"));

应该得到你所需要的,而不需要依赖DOM结构,这可能非常脆弱。

并且,您是正确的 - 包含CssSelector的所有浏览器类型都不支持。但是,在使用Xpath时支持它。

编辑:上面的表达式匹配任何具有@class属性的div,其中包含&#34;时间段&#34;,&#34; row0&#34;和&#34; col5&#34;当RowIndex = 0且ColIndex = 5时。