使用JavascriptExecutor点击时报org.openqa.selenium.By$ByXPath类型非法错误如何解决
报错原因
JavascriptExecutor的executeScript方法不支持传入org.openqa.selenium.By类型的参数,执行arguments[0].click()逻辑时,要求arguments[0]必须是已经找到的WebElement实例。你当前代码传入的element.getLocator()返回的是By定位对象,不属于方法支持的参数类型,因此触发类型非法异常。
修复方案
修改ScriptManager类的clickButton静态方法,先通过定位器查找得到WebElement实例后再传入脚本执行:
private static JavascriptExecutor jsExecutor = (JavascriptExecutor) BrowserFactory.getDriver(); public static void clickButton(BaseElement element){ // 先通过定位器获取WebElement实例 WebElement target = BrowserFactory.getDriver().findElement(element.getLocator()); jsExecutor.executeScript("arguments[0].click()", target); }
如果你的BaseElement类已经封装了获取对应WebElement实例的方法(比如getElement()),可以直接调用,无需重复查找:
public static void clickButton(BaseElement element){ jsExecutor.executeScript("arguments[0].click()", element.getElement()); }
可选优化
为了避免元素未加载完成导致查找失败,可以增加显式等待逻辑:
public static void clickButton(BaseElement element){ // 最多等待10秒直到元素可点击 WebDriverWait wait = new WebDriverWait(BrowserFactory.getDriver(), Duration.ofSeconds(10)); WebElement target = wait.until(ExpectedConditions.elementToBeClickable(element.getLocator())); jsExecutor.executeScript("arguments[0].click()", target); }
内容的提问来源于stack exchange,提问作者Денис Задорожний
相关产品推荐
相关产品推荐

