【发布时间】:2023-04-01 20:19:02
【问题描述】:
我尝试使用 XPath 检查(单击)此复选框,但到目前为止我的所有尝试都失败了,因为他们单击了图例中的链接 (Lorem ipsum)
HTML 源代码:
<div class="input-outer checkbox">
<div class="section-head sec-head2">
<!---->
<div class="pull-left">Tick this box</div>
<!----><!---->
<p aria-label="required" class="requiredAsteric">*</p>
</div>
<div class="input-validation">
<div class="input-icon-outer">
<!---->
<!---->
<!---->
<!---->
<input class="filled-in ng-untouched ng-pristine ng-invalid" type="checkbox" aria-label="Acceptera villkor" aria-required="true" aria-describedby="err_icon_prefix2_1" id="icon_prefix2_1"><!---->
<label class="leadform-checkbox" tabindex="0" for="icon_prefix2_1">
<div>
<p>Lorem ipsum dolor sit amet, consectetur <a href="https://www.google.com" target="_blank">adipiscing elit</a> adipiscing elit , sed do <a href="https://www.stackexchange.com" target="_blank">eiusmod tempor </a> incididunt ut labore et dolore magna aliqua.</p>
</div>
</label>
<!---->
</div>
</div>
</div>
到目前为止,我已经尝试了这三个 XPath,但都没有成功。
//label[@class='leadform-checkbox']/div";
//input[@aria-label='Tick this box']";
(//div[@class='input-icon-outer'])[3]";
如果我正确理解了 HTML(我可能没有正确理解),他们不会使用 HTML 中内置的复选框功能,而是创建了一个 CSS 类,其中包含一个看起来像复选框的图形元素。现在,当我向使用此样式的 div 发送点击时,点击最终会出现在 div 的文本内容上,而不是复选框上,然后点击那里找到的链接。
我理解正确吗?如何解决这个问题/将点击指向广场?
编辑:此“对话框”中还有另外两个文本字段。使用这两个 XPath 访问它们没有问题:
String xpText = "//input[@aria-label='text']";
String xpNumber = "//input[@aria-label='number']";
所有三个元素都在同一个iframe 中。在这些步骤之前,我在main content 和不同的iframes 之间执行了几次切换。
heading 2.2 在上面 HTML 源代码的屏幕截图顶部可见的 <div class="input-outer"> 中,所以我很确定我在正确的框架/内容中。此外,我可以访问属于该复选框的文本中的链接。
包括下面的整个对话框,以便更容易获得概览。
【问题讨论】:
-
你能把HTML放在问题里吗——一张图很难调试
-
当你说“他们不使用内置在 HTML 中的复选框功能,而是创建了一个 CSS 类,其中包含一个看起来像复选框的图形元素。” - 他们这样做,请注意上面您拥有的屏幕截图的中心
<input ... type="checkbox" ...- 这就是您要点击的内容 -
@RichEdwards 我试过点击它,但它只返回
org.openqa.selenium.ElementNotInteractableException: element not interactable。 -
@Bravo 已更新源代码。
-
是否存在
frame或iframe? - 看起来//input[@aria-label="Acceptera villkor"]可以工作
标签: javascript selenium selenium-webdriver xpath webdriverwait