0

我可以使用它的 XPath 找到一个元素,但不能使用它的 ID、类或文本。我不想使用 XPath,因为我知道它很容易损坏。

这是它的样子:

$browser.div(:xpath => "/html/body/nav/div[1]/div/div[3]/div/div/div[3]/div/div/div[2]/div[1]/div/div[2]/div[2]/div[1]/div[2]/div/div/div").present?
$browser.div(:xpath => "/html/body/nav/div[1]/div/div[3]/div/div/div[3]/div/div/div[2]/div[1]/div/div[2]/div[2]/div[1]/div[2]/div/div/div").click

它返回 true 并单击元素。

按照路径,我找到了元素,然后尝试使用它的 ID,例如:

$browser.div(:id => "PaymentSelector").present?
$browser.div(:id => "PaymentSelector").click

它返回 false 并尝试单击超时。文本或类也是如此。

该元素不在框架或 iframe 内。

为什么会发生这种情况,我该如何解决?

4

1 回答 1

3

正如评论中所讨论的,问题在于有多个元素具有相同的 id。这可以通过调用:

$browser.divs(:id => "PaymentSelector").count
#=> 5

Watir 返回第一个匹配元素,在这种情况下,它恰好是隐藏元素。它不是用户感兴趣的。您需要制作更具体的定位器,以便返回正确的元素。

一种选择是指定,:index因为您现在知道它是第二个:

$browser.div(:id => "PaymentSelector", :index => 2).click

:visible但是,使用定位器仅找到第一个可见的可能会更可靠:

$browser.div(:id => "PaymentSelector", :visible => true).click
于 2017-05-08T15:03:48.650 回答