我正在处理 Selenium-Java。为此,我需要在网页上执行自动化。
在上次收到非常好的反馈后,我确实面临着找到我想点击的对象之一的挑战。
下面的HTML代码定义了页面上的结构:
<div class="cmp-answers" data-evaluation="0" data-style="sc" data-submit-on-answer-click="0" data-columns="1">
<label class="cmp-answer correct disabled">
<input type="radio" name="answer3425" data-question-id="3425" data-answer-id="16882" value="1" checked="" disabled="" data-misc-answer="0" autocomplete="off">
<div class="cmp-answer-ui">
<span class="cmp-answer-label"><p>Anwer No 1</p></span>
<span class="cmp-answer-feedback"></span>
</div>
</label>
<label class="cmp-answer disabled">
<input type="radio" name="answer3425" data-question-id="3425" data-answer-id="16884" value="1" disabled="" data-misc-answer="0" autocomplete="off">
<div class="cmp-answer-ui">
<span class="cmp-answer-label"><p>Answer No 2</p></span>
<span class="cmp-answer-feedback"></span>
</div>
</label>
<label class="cmp-answer disabled">
<input type="radio" name="answer3425" data-question-id="3425" data-answer-id="16883" value="1" disabled="" data-misc-answer="0" autocomplete="off">
<div class="cmp-answer-ui">
<span class="cmp-answer-label"><p>Answer No 3</p></span>
<span class="cmp-answer-feedback"></span>
</div>
</label>
</div>
这些单选按钮提供三种不同的选择:
Answer No1
Answer No2
Answer No3
出于测试原因,我会自动点击
Answer No1
。
通过 html 分析,我复制了
xPath
以及 CSS 查找器信息。
我在
findElement
方法中使用了这些信息,例如:
driver.findElement(By.cssSelector(...));`
或
driver.findElement(By.xpath(...));`
我为上面显示的 HTML 代码定义的不同对象复制了
xPath
,并在 findElement
方法中使用它。
不幸的是,这些选项都没有导致我能够通过 Selenium 找到或指示对象。
因此,我的问题。 你们中有人经历过或面临相同或相似的挑战吗? 是否有任何建议或解决方案如何通过 Selenium 找到对象并(在下一步中)单击该按钮。
提前感谢您的帮助。
作为参数,我使用了 html 分析的输出(copy->xpath / copy->css)。
此外,在下一步中,我想在找到元素本身后执行
click()
。
您可能遇到的一些常见情况会导致您的问题:
需要加等。页面加载缓慢并且您的代码可能会在元素实际出现之前尝试在页面上找到该元素。
按钮位于 IFRAME 中。有关如何处理此问题的信息,请参阅文档。
按钮位于阴影根中。有关如何处理此问题的信息,请参阅 java.lang.NullPointerException error when trying to locate a shadow element with Selenium
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='cmp-answer-label']/p[text()='Anwer No 1']"))).click();