Selenium:JavaScript 警告:return 语句后无法访问代码

Selenium: JavaScript warning: unreachable code after return statement

我可以针对特定的 Selenium 脚本错误使用一些建议。一些背景:我正在尝试验证一位前同事的旧脚本是否仍然可用。不幸的是,那个同事已经不在身边了,所以我不得不做很多猜测工作。

他的脚本是一个简单的演示脚本(在 Java 中),应该用于 WhatsApp 网络并验证那里显示的扫描代码是否定期刷新。这是脚本:

import java.util.function.Supplier;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.junit.Assert;
import org.junit.jupiter.api.Test;

public class WhatsAppTest {
    @Test
    public void testScanCodeRenew() throws InterruptedException {
        
        System.setProperty("webdriver.gecko.driver","D:\WebDriver\geckodriver.exe");
        
        WebDriver driver=new FirefoxDriver();
        
        driver.get("https://web.whatsapp.com/");
        
        By xpath = By.xpath("//div[contains(@class,'_2EZ_m')]");
        WebElement scanCode = new WebDriverWait(driver, 10)
            .until(ExpectedConditions.presenceOfElementLocated(xpath));
        
        Supplier<String> getScanCode = 
               () -> scanCode.getAttribute("data-ref");
        
        String oldCode = getScanCode.get();
                
        for(int index = 0 ; index < 3 ; index++) {
            
            Thread.sleep(30_000);
            
            String newCode = getScanCode.get();
            
            Assert.assertNotEquals(oldCode, newCode);
            
            oldCode = newCode;
        }
    }

}

当我尝试在 Eclipse 中 运行 此脚本时,它失败并出现以下错误:

JavaScript warning: https://web.whatsapp.com/app.91e887b2b63434f2a2e6.js, line 1: unreachable code after return statement

外行人的猜测(我绝不是脚本专家)是网站自己的 Java脚本引发的错误,而不是 Selenium 脚本,但我可能完全误解了它。这是在 Eclipse 控制台中看到的完整错误输出:

1605553468566   geckodriver INFO    Listening on 127.0.0.1:15630
1605553469174   mozrunner::runner   INFO    Running command: "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "--marionette" "-foreground" "-no-remote" "-profile" "C:\Users\doubl\AppData\Local\Temp\rust_mozprofilehOBapN"
Can't find symbol 'eglSwapBuffersWithDamageEXT'.
JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't find profile directory.
console.warn: SearchSettings: "get: No settings file exists, new profile?" (new Error("", "(unknown module)"))
1605553472011   Marionette  INFO    Listening on port 51076
1605553472311   Marionette  WARN    TLS certificate errors will be ignored for this session
Nov 16, 2020 1:04:32 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
JavaScript warning: https://web.whatsapp.com/app.91e887b2b63434f2a2e6.js, line 1: unreachable code after return statement
JavaScript warning: https://web.whatsapp.com/app.91e887b2b63434f2a2e6.js, line 1: unreachable code after return statement

这个脚本可以挽救,还是我碰壁了?

首先,我在日志中没有看到任何有形错误。相关日志:

JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't find profile directory.
console.warn: SearchSettings: "get: No settings file exists, new profile?" (new Error("", "(unknown module)"))
.
JavaScript warning: https://web.whatsapp.com/app.91e887b2b63434f2a2e6.js, line 1: unreachable code after return statement
JavaScript warning: https://web.whatsapp.com/app.91e887b2b63434f2a2e6.js, line 1: unreachable code after return statement

...意味着有一个 JavaScript error while GeckoDriver initiated/spawned 一个新的 浏览上下文 Firefox 浏览session.


Selenium driven GeckoDriver initiates a 浏览上下文时,可以有几个JavaScript相关 WARNINGSERRORS 在初始化期间 TRACE 级别日志中。您可以安全地忽略这些初始化错误,直到 GeckoDriver 成功启动 Firefox Browsing session.


结论

createSession 成功并且检测到 W3C 方言时,您可以安全地忽略错误。