4 回答
TA贡献1775条经验 获得超8个赞
要click()
在该元素上,您必须引发WebDriverWait ,并且elementToBeClickable()
可以使用以下任一定位器策略:
cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.css-vote-button.pds-vote-button[id^='pd-vote-button']>span"))).click();
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='css-vote-button pds-vote-button' and starts-with(@id, 'pd-vote-button')]/span[text()='Vote']"))).click();
更新
作为替代方案,您可以使用executeScript()
以下方法:
cssSelector
:((JavascriptExecutor) driver).executeScript("arguments[0].click();", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.css-vote-button.pds-vote-button[id^='pd-vote-button']>span"))));
xpath
:((JavascriptExecutor) driver).executeScript("arguments[0].click();", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='css-vote-button pds-vote-button' and starts-with(@id, 'pd-vote-button')]/span[text()='Vote']"))));
TA贡献1828条经验 获得超13个赞
您收到ElementClickInterceptedException
错误,这意味着页面上的某些其他元素与您尝试单击的元素重叠。您需要以某种方式与页面进行交互,以使重叠元素不再重叠,或者使用 JavaScript 单击该元素并触发“单击”事件。
许多网站都有与用户一起滚动的页面导航元素,因此诸如浮动导航标题之类的内容可能会阻碍您想要单击的元素。DebanjanB 有一个很好的解决方案作为解决此问题的下一步,但我怀疑您在等待元素可单击时会收到 TimeoutException。
您很可能需要观看此自动化测试的执行,然后在测试失败后查看页面,然后再发现如何解决此问题。
TA贡献1845条经验 获得超8个赞
为什么不执行以下操作来单击?
WebElement click = driver.findElement(By.id("pd-vote-button10359300")); click.click()
TA贡献1873条经验 获得超9个赞
可能您的 ID 正在更改。请尝试以下 xpath。
//a[@class='css-vote-button pds-vote-button']/span[text()='Vote']
代码:
WebElement click = driver.findElement(By.xpath("//a[@class='css-vote-button pds-vote-button']/span[text()='Vote']"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", click);
添加回答
举报