需要在使用Java的SeleniumWebDriver中使用XPath选择特定元素
我有个问题,就是找不到答案。我通常擅长在这个意大利面数字代码中选择特定元素。这次我被难倒了。这是代码需要在使用Java的SeleniumWebDriver中使用XPath选择特定元素,selenium,xpath,selenium-webdriver,webdriver,Selenium,Xpath,Selenium Webdriver,Webdriver,我有个问题,就是找不到答案。我通常擅长在这个意大利面数字代码中选择特定元素。这次我被难倒了。这是代码 <div id="widget_dijit_form_DateTextBox_0_dropdown" class="dijitPopup dijitCalendarPopup" style="visibility: visible; top: 179.55px; z-index: 1000; left: 217.9px; right: auto; display: none;" role=
<div id="widget_dijit_form_DateTextBox_0_dropdown" class="dijitPopup dijitCalendarPopup" style="visibility: visible; top: 179.55px; z-index: 1000; left: 217.9px; right: auto; display: none;" role="presentation" dijitpopupparent="dijit_form_DateTextBox_0">
<table id="dijit_form_DateTextBox_0_popup" class="dijitCalendarContainer dijitCalendar" lang="" cellspacing="0" cellpadding="0" aria-labelledby="dijit_form_DateTextBox_0_popup_year" dojoattachevent="onkeypress: _onKeyPress" role="grid" style="-moz-user-select: none; top: 0px; overflow: hidden; width: 259px; visibility: visible;" dir="" widgetid="dijit_form_DateTextBox_0_popup">
<thead>
<tbody class="dijitReset dijitCalendarBodyContainer" dojoattachevent="onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1463904000000">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1463990400000">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1464076800000">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1464163200000">
<td class="dijitCalendarSelectedDate dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1464249600000" tabindex="0">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1464336000000">
<span class="dijitCalendarDateLabel">27</span>
</td>
...
...
<div id="widget_dijit_form_DateTextBox_1_dropdown" class="dijitPopup dijitCalendarPopup" style="visibility: visible; top: 225px; z-index: 1000; left: 217.9px; right: auto;" role="presentation" dijitpopupparent="dijit_form_DateTextBox_1">
<table id="dijit_form_DateTextBox_1_popup" class="dijitCalendarContainer dijitCalendar dijitCalendarHover dijitHover dijitCalendarFocused dijitCalendarHoverFocused dijitHoverFocused dijitFocused" lang="" cellspacing="0" cellpadding="0" aria-labelledby="dijit_form_DateTextBox_1_popup_year" dojoattachevent="onkeypress: _onKeyPress" role="grid" style="-moz-user-select: none; top: 0px; overflow: hidden; width: 255px; visibility: visible;" dir="" widgetid="dijit_form_DateTextBox_1_popup">
<thead>
<tbody class="dijitReset dijitCalendarBodyContainer" dojoattachevent="onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<tr class="dijitReset dijitCalendarWeekTemplate" role="row">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1432454400000">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1432540800000">
<td class="dijitCalendarCurrentDate dijitCalendarCurrentMonth dijitCalendarDateTemplate" role="gridcell" dijitdatevalue="1432627200000" tabindex="0">
<td class="dijitCalendarCurrentMonth dijitCalendarDateTemplate dijitCalendarHoveredDate" role="gridcell" dijitdatevalue="1432713600000">
<span class="dijitCalendarDateLabel">27</span>
</td>
它返回两个元素。所以,我只需要选择下面的一个
id="dijit_form_DateTextBox_1_popup"
我试过以下方法。。。所有节点都不返回匹配的节点
//*[@id='dijit_form_DateTextBox_1_popup' and contains(@class, 'dijitCalendarCurrentMonth') and contains(., '27')]
//*[@id='dijit_form_DateTextBox_1_popup'][contains(@class, 'dijitCalendarCurrentMonth')][contains(., '27')]
//*[@id='dijit_form_DateTextBox_1_popup'][contains(@class, 'dijitCalendarCurrentMonth') and contains(., '27')]
我做错了什么?使用
[@id='dijit\u form\u DateTextBox\u 1\u popup']
您正在表中查找不包含文本的27文本。如果删除,则应找到包含span
的td
,其中包含文本27。而且,由于td
没有任何id
属性与[@id='dijit\u form\u DateTextBox\u 1\u popup']
匹配。
试一试
我还看到包含文本27的span
是该表中唯一的span
。为了获得更好的性能,我认为您应该尝试以下css
#dijit_form_DateTextBox_1_popup span
//table[@id='dijit_form_DateTextBox_1_popup']//span[contains(.,'27')]
#dijit_form_DateTextBox_1_popup span