我对 Selenium 驱动程序的“单击按钮”有问题。
我已经在脑海中尝试了所有的解决方案,但没有用:
WebDriver driver = new ChromeDriver();
driver.get("https://demoqa.com/text-box");
driver.findElement(By.id("userName")).sendKeys("Daniel");
driver.findElement(By.id("userEmail")).sendKeys("[email protected]");
driver.findElement(By.id("currentAddress")).sendKeys("Italia");
driver.findElement(By.id("permanentAddress")).sendKeys("Italia");
//I've tried them all
//driver.findElement(By.xpath("//button[@id='submit']")).click();
//driver.findElement(By.cssSelector("#submit")).click();
driver.findElement(By.id("userName")).click();
//driver.findElement(By.id("userName")).submit();
//driver.findElement(By.linkText("Submit")).click();
错误是:
Exception in thread "main" org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <button id="submit" type="button" class="btn btn-primary">...</button> is not clickable at point (728, 631). Other element would receive the click: <div>...</div>
(Session info: chrome=112.0.5615.50)
Build info: version: '4.8.3', revision: 'b19b418e60'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '19.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [XXXXXXXXXXXXXX, clickElement {id=XXXXXXXXXXXX}]
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 112.0.5615.50, chrome: {chromedriverVersion: 112.0.5615.49 (XXXXXXXX..., userDataDir: C:\Users\XXXXXXX\AppData\Loca...}, goog:chromeOptions: {debuggerAddress: localhost:XXXXX}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: WINDOWS, proxy: Proxy(), se:cdp: ws://localhost:XXXXX/devtoo..., se:cdpVersion: XXXXXXXX, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: XXXXXXX, script: XXXXXX}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
Element: [[ChromeDriver: chrome on WINDOWS (XXXXXXXXXXXXXXXXXx)] -> xpath: //button[@id='submit']]
Session ID: XXXXXXXXXXXXX
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484)
at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:200)
at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:133)
at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:53)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:193)
at org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:183)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:257)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:78)
at selenium.fondamenti.Gestione_e_Convalida_TextBox.main(Gestione_e_Convalida_TextBox.java:44)
我希望它能工作
错误消息试图告诉您有另一个元素覆盖了提交按钮,它正在中断提交按钮的点击事件。
尝试使用javascript执行器:
import org.openqa.selenium.JavascriptExecutor;
JavascriptExecutor executer = (JavascriptExecutor) driver;
WebElement submitButton = driver.findElement(By.xpath("//button[@id='submit']"))
executer.executeScript("arguments[0].click", submitButton);
我的猜测是,由于您没有最大化浏览器,“提交”按钮实际上位于页脚或侧面板下方。下面的代码正在运行。
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://demoqa.com/text-box");
driver.findElement(By.id("userName")).sendKeys("Daniel");
driver.findElement(By.id("userEmail")).sendKeys("[email protected]");
driver.findElement(By.id("currentAddress")).sendKeys("Italia");
driver.findElement(By.id("permanentAddress")).sendKeys("Italia");
driver.findElement(By.id("submit")).click();
driver.quit();
仅当我向下滚动页面时它才有效,以便我看到按钮(我最大化了窗口但它没有下降)。
已解决:
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement bottone_submit = driver.findElement(By.id("submit"));
//This will scroll the page till the element is found
js.executeScript("arguments[0].scrollIntoView();", bottone_submit);