Как правильно найти элемент через Selenium-WebDriver для целей ввода - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь создать программу для автоматизации определенных загрузок, однако при использовании Selenium-WebDriver я не могу найти элемент, необходимый для входа в систему. Я нашел правильный элемент, однако на самом деле используюWebDriver # findElement () вызывает у меня проблемы.

<input id="form-username" class="form-field" form="popup-login" type="text" name="username" value="" tabindex="1" autofocus="">

Я пробовал разные методы По-разному, но ни один из них не работает, как и другие идентификаторы, хотя безрезультатно.

Я проверил другие посты, но ни одна из них, похоже, не подходит, так как они просто извлекают информацию из определенных точек в HTML, таких как строка, где я хочу ввести в нее информацию.

public void start(String usernameInfo, String passwordInfo) {
    driver = new HtmlUnitDriver();
    driver.get("https://www.nexusmods.com");

    WebElement username = driver.findElement(By.id("form-username"));
    username.sendKeys(usernameInfo);
    username.submit();

    WebElement password = driver.findElement(By.id("form-password"));
    password.sendKeys(passwordInfo);
    password.submit();

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

Выводжурнал можно посмотреть здесь: https://hastebin.com/zuvebosaha.nginx

ОБНОВЛЕНИЕ: Попробовал ChromeDriver и нашел следующий код (измененный для моего использования)

public void start(String usernameInfo, String passwordInfo) {
    System.setProperty("webdriver.chrome.driver","C:\\Users\\veeay\\Documents\\chromedriver.exe"); //add chrome driver path (System.setProperty("webdriver.chrome.drive",chrome driver path which you downloaded)

    WebDriver driver = new ChromeDriver(); // create object of ChromeDriver

    driver.manage().window().maximize(); // maximize the browser window

    driver.get("https://www.nexusmods.com/"); //enter url

    driver.findElement(By.id("form-username")).sendKeys(usernameInfo); //type textbox's id or name or any locater along with data in sendkeys

    driver.findElement(By.id("form-password")).sendKeys(passwordInfo);

    driver.findElement(By.id("btnLogin")).click();

    try {
        Thread.sleep(2000); //used thread for hold process
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    driver.quit(); //for close browser
}

, что привело к следующему: https://hastebin.com/iliyuvucok.cs

ОБНОВЛЕНИЕ 2: Как ни странно, теперь, когда я действительно отправил вопрос, у меня все хорошо.Теперь я могу делать все, кроме выбора кнопки входа.

public void start(String usernameInfo, String passwordInfo) {
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\veeay\\Documents\\chromedriver.exe"); //add chrome driver path (System.setProperty("webdriver.chrome.drive",chrome driver path which you downloaded)

    WebDriver driver = new ChromeDriver(); // create object of ChromeDriver

    driver.manage().window().maximize(); // maximize the browser window

    driver.get("https://www.nexusmods.com/Core/Libs/Common/Widgets/LoginPopUp?url=%2F%2Fwww.nexusmods.com%2F"); //enter url

    driver.findElement(By.id("form-username")).sendKeys(usernameInfo); //type textbox's id or name or any locater along with data in sendkeys

    driver.findElement(By.id("form-password")).sendKeys(passwordInfo);

    driver.findElement(By.id("sign-in-button")).click();

    try {
        Thread.sleep(2000); //used thread for hold process
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    driver.quit(); //for close browser
}

, видимо, кнопка входа не взаимодействует https://hastebin.com/ahuvezoxat.cs

1 Ответ

0 голосов
/ 11 июня 2019

Добавлено явное ожидание, и оно работает:

package vee;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

    public class Vee {

        @Test
        public void start() {
            System.setProperty("webdriver.chrome.driver", "C:\\Users\\pburgr\\Desktop\\selenium-tests\\GCH_driver\\chromedriver.exe");

            WebDriver driver = new ChromeDriver();
            driver.manage().window().maximize();

            // new explicit wait
            WebDriverWait webDriverWait = new WebDriverWait(driver, 5);

            driver.get("https://www.nexusmods.com/Core/Libs/Common/Widgets/LoginPopUp?url=%2F%2Fwww.nexusmods.com%2F");

            // using explicit wait
            webDriverWait.until(ExpectedConditions.elementToBeClickable(By.id("sign-in-button")));

            driver.findElement(By.id("form-username")).sendKeys("some name");
            driver.findElement(By.id("form-password")).sendKeys("some password");

            // print true or false by the button state
            System.out.println(driver.findElement(By.id("sign-in-button")).isEnabled());

            driver.findElement(By.id("sign-in-button")).click();

            driver.quit();
        }
    }

Вывод:

Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 4301
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1560240089.419][WARNING]: This version of ChromeDriver has not been tested with Chrome version 75.
Čer 11, 2019 10:01:31 DOP. org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
true

Возможно, при повторении теста всплывает recaptcha и отключается кнопка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...