Пожалуйста, проверьте 'find_element_by_name' для кнопки поиска или используйте xpath.
Я запускаю скрипт в Java. Надеюсь, это поможет вам ...
И для поиска xpath использование селен IDE .
и код ниже: -
WebDriver driver =new FirefoxDriver();
driver.get("https://www.google.com");
WebDriverWait wait = new WebDriverWait (driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@name='q']")));
WebElement ele = driver.findElement(By.xpath("//input[@name='q']"));
ele.sendKeys("q");
driver.findElement(By.xpath("(//input[@name='btnK'])[2]")).sendKeys(Keys.ENTER);
и одно предложение drop 'thread.sleep' , потому что оно останавливает программу на указанное время.
Thread.sleep () :В спящем коде всегда будут ждать указанные секунды в скобках, даже если рабочая страница готова через 1 секунду.Таким образом, это может замедлить тестирование.
Явное ожидание : Явное ожидание - это своего рода ожидание определенного условия, прежде чем продолжить работу в коде.
Неявное ожидание : Неявное ожидание - это сказать WebDriver, чтобы он запрашивал DOM в течение определенного времени при попытке найти элемент или элементы, если они не доступны сразу.По умолчанию установлено значение 0
. Рекомендуется ли использовать Thread.sleep во время теста на селен?
Отредактировано:
также см. Этот https://stackoverflow.com/a/56078618/4513879 ответ.
Element is not reachable by keyboard
в простых словах означает, что элемент не может быть достигнут с помощью клавиатуры, что означает, что вы не будете физически взаимодействовать с ним даже. Избегайте использования JS-кликов.Пользователь не может щелкнуть элемент, который не виден, скрыт или находится за пределами экрана и т. Д. Selenium был разработан, чтобы действовать как пользователь и выдавать ошибки, когда пользователь не может щелкнуть элемент.
Для получения дополнительной информации, пожалуйста, пройдите https://stackoverflow.com/a/49872160/4513879 этот ответ.
Обновленный код: -
WebDriver driver =new FirefoxDriver();
driver.get("https://www.google.com");
WebDriverWait wait = new WebDriverWait (driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@name='q']")));
WebElement ele = driver.findElement(By.xpath("//input[@name='q']"));
ele.sendKeys("q");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("btnK"))).click();
в приведенном выше коде я добавил new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.name("btnK"))).click();
эту строку.