Phantomjs浏览器element.getText()为空



我有一个简单的测试,将element.getText()值打印到控制台。如果我用ChromeDriver运行代码,它的工作没有任何问题。元素是可见的,我也在等待元素是可见的,我也在getText()调用之前测试了element.isDisplayed()。但是如果我用Phantomjs驱动程序运行它,getText()的结果是一个空字符串。下面是代码:

public void test() throws InterruptedException {
openPage();
WebElement header = driver.findElement(By.id("header"));
new WebDriverWait(driver, 5).until(ExpectedConditions.visibilityOf(header));
System.out.println(header.isDisplayed());
System.out.println(header.getText());
}

在这个元素上有一个CSS变换。

这是网页https://tatrytec.eu/,它是主标题Tatrytec.eu

谁能告诉我问题出在哪里?

https://phantomjs.org/,该项目暂时暂停。Chrome和phantom使用不同的渲染引擎,所以现在使用phantomjs没有意义,使用Chrome headless代替

https://www.chromium.org/blink

以前的无头浏览器,如phantomjs使用webkit渲染引擎,但现在chrome内置无头支持和使用相同的渲染引擎blink

https://developers.google.com/web/updates/2017/04/headless-chrome: ~:文本=无头% 20铬% 20 % 20相似% 20,% % 20 20最新版本% 20的% 20眨眼。

还请注意w3c是默认的非headless chrome,但对于headless chrome,它是假的,并使用JSONwire协议,这不会影响测试的质量,但只是为您的信息

https://stackoverflow.com/a/65841695/6793637

截至2021年2月

https://bugs.chromium.org/p/chromedriver/issues/detail?id=1925

Headless chrome不支持首选项设置

你可以使用无头铬:

ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("window-size=1400,800");       
options.addArguments("disable-gpu")
//options.addArguments("--headless", "--disable-gpu", "--window-size=1400,800","--ignore-certificate-errors");
WebDriver driver = new ChromeDriver(options); 

最新更新