#java #selenium-webdriver
#java #selenium-webdriver
Вопрос:
Я пытаюсь щелкнуть по веб-элементу и ввести текст внутри него.
Шаги:
-
Запуск «https://www.phptravels.net /«
-
Перейдите на вкладку туры.
-
Выполните операцию отправки ключей в поле поиска.
1. Я попытался использовать поле поиска «Нажмите» и ввести текст с помощью ключей отправки, но не смог этого сделать, после этого я выполнил действие «нажмите» и отправил ключи с помощью JavaScript, но это также не работает.
- Я написал другой 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");