Как щелкнуть элемент в Selenium WebDriver с помощью JavaScript
28 Ripon Al Wasim [2012-08-14 10:41:00]
У меня есть следующий HTML:
<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button>
Мой следующий код для нажатия кнопки "Поиск Google" работает хорошо, используя Java в WebDriver.
driver.findElement(By.id("gbqfb")).click();
Я хочу использовать JavaScript с помощью WebDriver, чтобы нажать кнопку. Как я могу это сделать?
java javascript button click selenium-webdriver
8 ответов
78 Решение JimEvans [2012-08-14 18:49:00]
Выполнение клика по JavaScript имеет некоторые способы поведения, о которых вы должны знать. Если, например, код, связанный с событием onclick
вашего элемента, вызывает window.alert()
, вы можете найти window.alert()
Selenium в зависимости от реализации драйвера браузера. Тем не менее, вы можете использовать класс JavascriptExecutor
для этого. Мое решение отличается от других, предложенных, тем не менее, тем, что вы все еще можете использовать методы WebDriver для поиска элементов.
// Assume driver is a valid WebDriver instance that
// has been properly instantiated elsewhere.
WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
Следует также отметить, что вам может быть лучше использовать метод click()
интерфейса WebElement
, но отключить собственные события до создания экземпляра вашего драйвера. Это позволит достичь той же цели (с теми же потенциальными ограничениями), но не заставлять вас писать и поддерживать свой собственный JavaScript.
5 Ripon Al Wasim [2012-08-14 11:13:00]
Вот код с помощью JavaScript, чтобы щелкнуть кнопку в WebDriver:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
3 djangofan [2012-12-18 20:59:00]
Я знаю, что это не JavaScript, но вы также можете физически использовать щелчок мышью, чтобы щелкнуть динамический якорь Javascript:
public static void mouseClickByLocator( String cssLocator ) {
String locator = cssLocator;
WebElement el = driver.findElement( By.cssSelector( locator ) );
Actions builder = new Actions(driver);
builder.moveToElement( el ).click( el );
builder.perform();
}
2 Dale [2013-06-16 22:30:00]
Не уверен, что ответ на OP действительно ответил.
var driver = new webdriver.Builder().usingServer('serverAddress').withCapabilities({'browserName': 'firefox'}).build();
driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('gbqfb')).click();
2 Stilltorik [2012-08-14 11:18:00]
Вы не можете использовать WebDriver для этого в JavaScript, поскольку WebDriver - это инструмент Java. Однако вы можете выполнить JavaScript с Java с помощью WebDriver, и вы можете вызвать код JavaScript, который нажимает на определенную кнопку.
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('gbqfb').click()");
0 hemanto [2017-02-01 12:54:00]
Этот код выполнит операцию щелчка на WebElement
"мы" через 100 мс:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we);
0 Jyothi M [2018-08-09 08:09:00]
XPath: проверьте элемент на целевой странице, скопируйте Xpath и используйте приведенный ниже сценарий: работал для меня.
WebElement nameInputField = driver.findElement(By.xpath("html/body/div[6]/div[1]/div[3]/div/div/div[1]/div[3]/ul/li[4]/a"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", nameInputField);
-10 Mofazzal Hossain [2014-09-23 20:53:00]
Скрипты java-скриптов для кросс-браузера
public class MultipleBrowser {
public WebDriver driver= null;
String browser="mozilla";
String url="https://www.omnicard.com";
@BeforeMethod
public void LaunchBrowser() {
if(browser.equalsIgnoreCase("mozilla"))
driver= new FirefoxDriver();
else if(browser.equalsIgnoreCase("safari"))
driver= new SafariDriver();
else if(browser.equalsIgnoreCase("chrome"))
//System.setProperty("webdriver.chrome.driver","/Users/mhossain/Desktop/chromedriver");
driver= new ChromeDriver();
driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
driver.navigate().to(url);
}
}
но если вы хотите запустить firefox, вам нужно отключить путь chrome, иначе браузер запустится, но приложение может не работать. (попробуйте в обоих направлениях).