我尝试没有成功点击一个特定的按钮使用SELENIUM &JAVA,但是我得到这个错误信息:
Expected condition failed: waiting for element to be clickable: By.xpath: //*[@id="documentation"]/div/div[2]/div/button (tried for 10 second(s) with 500 milliseconds interval)
那个按钮有这个:
<button type="button" class="btn btn-sm btn-link add-row">Upload FILE</button>
XPATH为
//*[@id="documentation"]/div/div[2]/div/div/button
我这样做了:
WebDriverWait wait10735 = new WebDriverWait(driver,Duration.ofSeconds(10));
JavascriptExecutor executor3735 = (JavascriptExecutor)driver;
WebElement elementCat4735=wait10735.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id="documentation"]/div/div[2]/div/button")));
我在这里做错了什么?
如果使用xpath:
//button[text()='Upload FILE']
。
为什么会这样?
问题是您使用了xpath:xpath //*[@id="documentation"]/div/div[2]/div/button
你要做的是:
- 定位具有
id="documentation"
的元素 - 然后进入该元素的第一个div子元素
- 然后转到前一个div的第二个子div
- 然后转到前一个div 的第一个div子div然后点击按钮
正如你所看到的,你的最终元素(按钮)依赖于其他几个要定位的父元素。一旦这些父元素中的一个发生了变化,xpath就不再有效了。
根据元素本身的属性(而不是围绕它的元素)来定位xpath,会更好。
在本例中,我使用了元素的文本。
我不知道这是否可能,但如果可能的话,一个好主意是与开发人员讨论为您将与自动化一起使用的所有元素使用id。这是一个团队的工作!