Selenium 镀铬无头元件不可见

Selenium 镀铬无头元件不可见,selenium,selenium-webdriver,webdriver,selenium-chromedriver,Selenium,Selenium Webdriver,Webdriver,Selenium Chromedriver,尝试在iframe中与一个编辑框进行交互时,我遇到以下错误。 Actions actions = new Actions(driver); JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript("arguments[0].scrollIntoView()", element); js.executeScript("window.scrollTo(0,document.body.scr‌​ollHeight);"

尝试在iframe中与一个编辑框进行交互时,我遇到以下错误。

Actions actions = new Actions(driver);
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].scrollIntoView()", element);
js.executeScript("window.scrollTo(0,document.body.scr‌​ollHeight);");
请注意,如果我不在headless模式下运行该代码,它工作正常。只有在无头模式下运行时才会出现问题

错误:

org.openqa.selenium.ElementNotVisibleException: element not visible
  (Session info: headless chrome=60.0.3112.113)
  (Driver info: chromedriver=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4),platform=Linux 4.9.51-10.52.amzn1.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 21 milliseconds
Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'
System info: host: 'ip-172-31-41-152', ip: '172.31.41.152', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.51-10.52.amzn1.x86_64', java.version: '1.8.0_45'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4), userDataDir=/tmp/.org.chromium.Chromium.aRCh3q}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=60.0.3112.113, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]
Session ID: ebc4a4ce4a038d2440aedb1f4d952a64
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:327)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:85)
    at com.medexpress.pages.Buyer.CheckoutPage.submitPage(CheckoutPage.java:148)
    at com.medexpress.steps.Order.Submits_the_order(Order.java:120)
    at ✽.And Submits the order(com/medexpress/steps/2oder_checkout.feature:44)
org.openqa.selenium.element不可见异常:元素不可见

Stacktrace:

org.openqa.selenium.ElementNotVisibleException: element not visible
  (Session info: headless chrome=60.0.3112.113)
  (Driver info: chromedriver=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4),platform=Linux 4.9.51-10.52.amzn1.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 21 milliseconds
Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'
System info: host: 'ip-172-31-41-152', ip: '172.31.41.152', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.51-10.52.amzn1.x86_64', java.version: '1.8.0_45'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4), userDataDir=/tmp/.org.chromium.Chromium.aRCh3q}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=60.0.3112.113, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]
Session ID: ebc4a4ce4a038d2440aedb1f4d952a64
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:327)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:85)
    at com.medexpress.pages.Buyer.CheckoutPage.submitPage(CheckoutPage.java:148)
    at com.medexpress.steps.Order.Submits_the_order(Order.java:120)
    at ✽.And Submits the order(com/medexpress/steps/2oder_checkout.feature:44)
为了解决这个问题,我尝试滚动到该
Iframe
或使该Iframe成为焦点的元素。我试过做以下事情。然而,一切都不起作用。它不会滚动到给定的元素

使用本机事件滚动

actions.moveToElement(element).build().perform();
使用JavaScript滚动

Actions actions = new Actions(driver);
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].scrollIntoView()", element);
js.executeScript("window.scrollTo(0,document.body.scr‌​ollHeight);");
使用javascript滚动至页面末尾

Actions actions = new Actions(driver);
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].scrollIntoView()", element);
js.executeScript("window.scrollTo(0,document.body.scr‌​ollHeight);");
上述代码不工作,并给出以下错误

org.openqa.selenium.WebDriverException:未知错误:Runtime.evaluate引发异常:SyntaxError:无效或意外令牌

请注意,以上所有代码都是在chrome上运行的,只针对headless

驱动器代码

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("headless");
chromeOptions.addArguments("disable-gpu");
chromeOptions.addArguments("window-size=1200,1100");
driver = new ChromeDriver(chromeOptions);
如果某个元素可见(其高度和宽度大于0),则单击该元素而无需滚动

我也有同样的问题,通过将窗口设置为FullHD来修复,所以只需更改这一行:

chromeOptions.addArguments("window-size=1200,1100");

我不知道Java的语法,因为我在C#中修复了它,但值得一试。

如果一个元素是可见的(它的高度和宽度大于0),它会单击该元素而不需要滚动

我也有同样的问题,通过将窗口设置为FullHD来修复,所以只需更改这一行:

chromeOptions.addArguments("window-size=1200,1100");


我不知道Java的语法,因为我在C#中修复了它,但值得一试。

面临类似的问题。以下几行代码对我有用-

options.addArguments("--proxy-server='direct://'");
options.addArguments("--proxy-bypass-list=*");

来源-

面临类似问题。以下几行代码对我有用-

options.addArguments("--proxy-server='direct://'");
options.addArguments("--proxy-bypass-list=*");
Source-

增加“窗口大小”修复了吞咽量角器中的错误

browserName: 'chrome',
chromeOptions: {
args: [ "--headless", "--disable-gpu", "--window-size=1200,900" ]
}
增加“窗口大小”修复了吞咽量角器中的错误

browserName: 'chrome',
chromeOptions: {
args: [ "--headless", "--disable-gpu", "--window-size=1200,900" ]
}

你解决了吗?你解决了吗?