你好,我正在尝试选择并单击按钮"立即预订";然而,当我查看源代码时,它显示了以下内容。。。
<div class="pl-0 mr-3 sticky-btn-wrapper">
<div class="ko-container book-now-btn-container">
<button class="btn btn-secondary text-uppercase btn-landing go-to-session" data-eid="757231" data-aid="97739" data-isavailable="true"> Book now</button>
</div>
</div>
<div class="btn-book-top sticky-btn-wrapper justify-content-end" id="book-button-top">
<div id="sticky-bottom-btn" class="sticky-bottom-btn flex-row w-100">
<div class="ko-container book-now-btn-container">
<button class="btn btn-secondary text-uppercase btn-landing go-to-session" data-eid="757231" data-aid="97739" data-isavailable="true">Book now</button></div>
</div>
</div>
</div>
当我检查";立即预订";Firefox中的链接显示以下
<div class="ko-container book-now-btn-container">
<button class="btn btn-secondary text-uppercase btn-landing go-to-session" data-eid="757231" data-aid="97739" data-isavailable="true">
Book now
</button>
</div>
[为什么有两个按钮class="btn btn secondary text大写btn landing to session"的实例?]
我已经尝试选择的第一个实例
WebElement wb = myDriver.findElement(By.xpath ("//div[@class='pl-0 mr-3 sticky-btn-wrapper'] and button[@class='btn btn-secondary text-uppercase btn-landing go-to-session']"));
wb.click();
但我在Junit中得到了以下例外。。。
org.openqa.selenium.InvalidSelectorException:
Given xpath expression "//div[@class='pl-0 mr-3 sticky-btn-wrapper'] and button[@class='btn btn-secondary text-uppercase btn-landing go-to-session']"
is invalid: TypeError: Document.evaluate: Result type mismatch
如有任何帮助,我们将不胜感激!
您不需要使用and
操作数作为定位器,只需将xpath更改为:
//div[@class='pl-0 mr-3 sticky-btn-wrapper']//button
当您有两个或多个相似元素并且需要添加更多限制时,需要使用关键字and
。此外,and
参数应该应用于同一个标记,而不是不同的标记。
例如:
<div class='1' style='1'>
<button>Button1</button>
</div>
<div class='1' style='2'>
<button>Button2</button>
</div>
<div class='2' style='2'>
<button>Button3</button>
</div>
如果您需要获取按钮2的定位器:
//div[@class='1' and @style='2']/button
请尝试以下xpath:
//div[contains(text(),'Book now')]
PS:如果我们在HTML DOM
中是否有唯一条目,请检查dev tools
(谷歌铬)。
检查步骤:
Press F12 in Chrome
->转到element
部分->进行CTRL + F
->然后粘贴xpath
,看看您想要的element
是否通过1/1
匹配节点突出显示。
如果有多个条目,请尝试索引:
(//div[contains(text(),'Book now')])[1]
或
(//div[contains(text(),'Book now')])[2]
事实上,你可以有[3]
、[4]
和任何数字,但你必须确保在HTMLDOM中它是1/1匹配的。