невозможно щелкнуть по Webelement на веб-странице

#java #selenium-webdriver

#java #selenium-webdriver

Вопрос:

Я пытаюсь щелкнуть по веб-элементу и ввести текст внутри него.

Шаги:

  1. Запуск «https://www.phptravels.net /«

  2. Перейдите на вкладку туры.

  3. Выполните операцию отправки ключей в поле поиска.

1. Я попытался использовать поле поиска «Нажмите» и ввести текст с помощью ключей отправки, но не смог этого сделать, после этого я выполнил действие «нажмите» и отправил ключи с помощью JavaScript, но это также не работает.

  1. Я написал другой xpath для того же, но без положительных результатов.

// код, как показано ниже

 public class HandlingDropDown2 {

    static WebElement element;
    static WebDriver driver;

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "Driver/chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();        
        driver.get("https://www.phptravels.net/");

        element = driver.findElement(By.xpath("//span[contains(text(),'Tours     ')]"));
        element.click();

        Thread.sleep(2000);

        element = driver.findElement(By.xpath("//button[contains(text(),'Got it!')]"));

        element.click();

        Thread.sleep(2000);

        element = driver.findElement(By.xpath("//div[@id='s2id_autogen5']"));
        JavascriptExecutor executor = (JavascriptExecutor)driver;
        executor.executeScript("arguments[0].click();", element);

        System.out.println("clicked on autogen box");

        //element.click();

        Thread.sleep(2000);

        element = driver.findElement(By.xpath("//div[@class='select2-drop select2-display-none select2-with-searchbox select2-drop-active']"));

        JavascriptExecutor executor2 = (JavascriptExecutor)driver;
        executor2.executeScript("arguments[0].'value='Test';",element);
        //element.sendKeys("test"); 
    }
}
  

Ожидаемый результат: пользователь должен иметь возможность вводить некоторый текст с помощью автоматизации.

Фактический результат: невозможно выполнить click и sendkeys с использованием JavaScript и простых методов selenium.

Комментарии:

1. Какую ошибку вы получаете? Страница заполнена ajax? Вы не должны использовать Thread.sleep, а вместо этого WebDriverWait. Если вы не уверены в своем XPath, инструменты разработчика Google Chrome позволяют легко скопировать правильные выражения xpath для узлов.

2. @kilian — Я получаю исключение ошибки ниже в потоке «main» org.openqa.selenium. Исключение NoSuchElementException: такого элемента нет: не удается найти элемент: {«метод»: «xpath», «селектор»:»//div[@class=’select2-drop select2-display-none select2-with-searchbox select2-drop-active’]»} (Информация о сеансе: chrome = 73.0.3683.86) (Информация о драйвере: chromedriver= 2.42.591088

3. Я также использовал дополнение webdriver element locator для Firefox, также используя дополнение chrome path для браузера Chrome. xpath допустим, но скрипт завершается с ошибкой «не удается найти элемент»

4. Во время расследования я обнаружил, что имя класса этого элемента динамически менялось всякий раз, когда мы выполняем щелчок по этому элементу, поэтому я предпочел использовать xpath типа «//div[@id=’select2-drop’]//input[starts-with(@class,’select2-input’)]», что решило мою проблему. Спасибо @kilin.

Ответ №1:

Помните о функциональности SendKeys

Прежде всего, ваш xPath элемент div, и вы пытаетесь сделать sendKeys в элементе div, что неправильно. Если вы заметили, что есть элемент span с именем «Поиск по списку или названию города». Если вы нажмете там, то ваш элемент ввода станет видимым там, где вы можете click() и sendKeys("")

Попробуйте,

 // click on below span element to get input visibled,
element = driver.findElement(By.xpath("//span[text()='Search by Listing or City Name']"));
element.click();
  

Тогда ваш элемент ввода теперь доступен, где вы можете щелкнуть и отправить ключи

 element = driver.findElement(By.xpath("//div[@id='select2-drop']//input[@class='select2-input'][last()]"));
element.click();
element.sendKeys("test");