使用 element.click() 时,WebDriverException‘未知错误:脚本未返回元素引用’
2019-11-15
945
尝试使用 selenium '3.14.0' java '1.8.0_151' 自动化 UI 测试 自动化在独立 GUI 上运行,并作为内部 iframe 中另一个系统的插件运行 我有一个指向隐藏复选框的标签,部分元素您可以在下面看到..
input[type=checkbox] {
display: none;
label {
cursor: pointer;
display: inline-block;
width: 100%;
padding: 0 0 0 1.333333rem;
当从独立 UI 单击标签时 - 它工作正常,但是当在包含系统的 iframe 中单击同一个标签时,我得到:
org.openqa.selenium.WebDriverException: unknown error: no element reference returned by script
(Session info: chrome=78.0.3904.97)
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 78.0.3904.97, chrome: {chromedriverVersion: 78.0.3904.11 javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 80eb99bb78d864bcd2a4c1d4205a5d1c
代码:
WebDriver driver = new ChromeDriver(chromeOptions);
WebDriverWait wait = new WebDriverWait(driver, WEBDRIVER_WAIT_TIME_SEC);
WebElement plugin = getRemoteIframe(By.cssSelector(pluginIframeCss));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(plugin));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("my-id")));
element.click();//throws WebDriverException
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("my-id")));
element.click();//throws WebDriverException
请注意,我找到了具有所有属性的元素,元素是可见且可点击的,当尝试从控制台(F12)单击它时,它可以工作,只有通过代码单击会引发异常...
有人熟悉这个问题吗?
3个回答
您可以尝试使用 javascriptExecutor 执行点击操作吗?可能是该元素被其他 webElement 覆盖了。
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", webElement);
Palvi Rani
2019-11-15
如果您的 元素 位于 iframe 内,则必须先切换到 iframe,如下所示:
driver.switchTo().frame(driver.findElement(By.id("frameId")));
然后您就可以对该 元素 执行任何操作了
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("my-id")));
element.click();
0xM4x
2019-11-15
我不确定为什么会出现此问题。但您可以尝试使用 Action 类。
Actions builder = new Actions(driver); Action clickLabel = builder.moveToElement(driver.findElement(By.id("my-id"))).click().build(); clickLabel.perform();
更多信息请访问 https://www.guru99.com/keyboard-mouse-events-files-webdriver.html
尽管问题与此无关:您提到的 Selenium 版本相当旧。您可以尝试使用最新版本:3.141.59
Ishan
2019-11-15