Подтвердить что ты не робот

Как щелкнуть элемент в Selenium WebDriver с помощью JavaScript

У меня есть следующий 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, чтобы нажать кнопку. Как я могу это сделать?

4b9b3361

Ответ 1

Выполнение клика через JavaScript имеет некоторые особенности поведения, о которых вам следует знать. Если, например, код, связанный с событием onclick вашего элемента, вызывает 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.

Ответ 2

Вот код с помощью JavaScript, чтобы щелкнуть кнопку в WebDriver:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");

Ответ 3

Я знаю, что это не 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();
}

Ответ 4

Вы не можете использовать WebDriver для этого в JavaScript, поскольку WebDriver - это инструмент Java. Однако вы можете выполнить JavaScript с Java с помощью WebDriver, и вы можете вызвать код JavaScript, который нажимает на определенную кнопку.

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('gbqfb').click()");

Ответ 5

Не уверен, что ответ на 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();

Ответ 6

Этот код выполнит операцию щелчка на WebElement "мы" через 100 мс:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we);

Ответ 7

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);

Ответ 8

Скрипты 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, иначе браузер запустится, но приложение может не работать. (попробуйте в обоих направлениях).