为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Selenium 和 Java 13 自动化 Span

使用 Selenium 和 Java 13 自动化 Span

开满天机 2023-08-16 17:37:02
我正在使用 Java 中的 selenium 自动化一个网站。<a id="pd-vote-button10359300" class="css-vote-button pds-vote-button"><span>Vote</span></a>对于这个按钮,我需要在 Selenium 中自动单击。我正在遵循但不工作。WebElement click = driver.findElement(By.id("pd-vote-button10359300"));JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", 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']"))).click();
查看完整描述

4 回答

?
www说

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']"))));

查看完整回答
反对 回复 2023-08-16
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您收到ElementClickInterceptedException错误,这意味着页面上的某些其他元素与您尝试单击的元素重叠。您需要以某种方式与页面进行交互,以使重叠元素不再重叠,或者使用 JavaScript 单击该元素并触发“单击”事件。

许多网站都有与用户一起滚动的页面导航元素,因此诸如浮动导航标题之类的内容可能会阻碍您想要单击的元素。DebanjanB 有一个很好的解决方案作为解决此问题的下一步,但我怀疑您在等待元素可单击时会收到 TimeoutException。

您很可能需要观看此自动化测试的执行,然后在测试失败后查看页面,然后再发现如何解决此问题。


查看完整回答
反对 回复 2023-08-16
?
精慕HU

TA贡献1845条经验 获得超8个赞

为什么不执行以下操作来单击?

WebElement click = driver.findElement(By.id("pd-vote-button10359300"));
click.click()


查看完整回答
反对 回复 2023-08-16
?
眼眸繁星

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);


查看完整回答
反对 回复 2023-08-16
  • 4 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信