java - 元素不可见,selenium chromedriver,java

标签 java selenium selenium-webdriver selenium-chromedriver

我正在尝试使用 Selenium,但遇到了一个问题,它找不到任何东西。

我的代码如下所示:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Flows {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "/Users/mn/Desktop/project/turv/src/main/chromedriver");
        WebDriver driver = new ChromeDriver();

        String baseUrl = "http://anywhere.c3a.dk/";  
        driver.get(baseUrl);   

        driver.findElement(By.id("login")).click();
        driver.findElement(By.name("username")).sendKeys("placeholder");
        driver.findElement(By.name("password")).sendKeys("placeholder");

        driver.findElement(By.cssSelector("button.button.js-login-button")).click();

        System.out.println(driver.getTitle());

        driver.close();    
    }
}

当我尝试与网站交互时出现问题。简单的 driver.getTitle() 工作正常,但在尝试访问登录字段时出现错误。我尝试过 By.nameBy.cssSelector .但两者给出相同的结果。我正在使用 Chrome 浏览器插件,因此记录一些内容,然后尝试将其内容应用到我的代码中,但是当我运行此插件时,出现以下错误:

Starting ChromeDriver 2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011) on port 31943
Only local connections are allowed.
May 07, 2018 1:06:18 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible
  (Session info: chrome=66.0.3359.139)
  (Driver info: chromedriver=2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011),platform=Mac OS X 10.13.3 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z'
System info: host: 'cetreas-MBP', ip: 'fe80:0:0:0:c9e:2c67:1d27:4e0b%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.3', java.version: '1.8.0_161'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 2.38.552518 (183d19265345f5..., userDataDir: /var/folders/s7/lv2wt4t15cn...}, cssSelectorsEnabled: true, databaseEnabled: false, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: MAC, platformName: MAC, rotatable: false, setWindowRect: true, takesHeapSnapshot: true, takesScreenshot: true, unexpectedAlertBehaviour: , unhandledPromptBehavior: , version: 66.0.3359.139, webStorageEnabled: true}
Session ID: 6d1cb5352073e7f1071830edf5b40106
    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:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
    at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
    at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80)
    at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83)
    at com.cetrea.flows.Flows.main(Flows.java:19)

我不认为driver.findElement(By.id("login")).click();完全有必要,只是我尝试过的一种方法,因为它找不到另一个。

最佳答案

很可能 WebDriver 会在元素可见之前尝试访问该元素。我们需要等待一段时间才能看到它。

尝试:

driver.get("http://anywhere.c3a.dk/");

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("username"))).sendKeys("placeholder");
driver.findElement(By.name("password")).sendKeys("placeholder");

关于java - 元素不可见,selenium chromedriver,java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50213677/

相关文章:

java - Android Activity 变量类型

testing - Selenium 是一个很好用的测试软件吗?

java - 如何在bamboo headless中上传带有selenium的文件

java - Selenium 代码打开 facebook Messenger 并发送消息

python - 如何使用 Selenium 和 Python 切换窗口句柄

python - 在 python selenium 中切换窗口时出错

java - 压缩机是抽象的;无法实例化

java - Joptionpane 不处理 switch-case

Python Selenium从 "menuitem"中选择 "menubar"

java - 当索引未知时如何更改数组中的一个位置?