Как щелкнуть элемент в 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, чтобы нажать кнопку. Как мне это сделать?
12 ответов
Выполнение клика через 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.
Вот код, использующий JavaScript для нажатия кнопки в WebDriver:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
Я знаю, что это не 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();
}
Не уверен, что ответ ОП был действительно дан ответ.
var driver = new webdriver.Builder().usingServer('serverAddress').withCapabilities({'browserName': 'firefox'}).build();
driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('gbqfb')).click();
Вы не можете использовать WebDriver, чтобы сделать это в JavaScript, так как WebDriver - это инструмент Java. Однако вы можете выполнить JavaScript из Java с помощью WebDriver и вызвать некоторый код JavaScript, который нажимает определенную кнопку.
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('gbqfb').click()");
По 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);
const {Builder, By, Key, util} = require('selenium-webdriver')
// FUNÇÃO PARA PAUSA
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function example() {
// chrome
let driver = await new Builder().forBrowser("firefox").build()
await driver.get('https://www.google.com.br')
// await driver.findElement(By.name('q')).sendKeys('Selenium' ,Key.RETURN)
await sleep(2000)
await driver.findElement(By.name('q')).sendKeys('Selenium')
await sleep(2000)
// CLICAR
driver.findElement(By.name('btnK')).click()
}
example()
Com essas últimas linhas, voiceê pode clicar!
Используйте приведенный ниже код, который работал у меня:
public void sendKeysJavascript() {
String file = getfile();
WebElement browser = driver.findElement(By.xpath("//input[@type='file']"));
JavascriptExecutor js = (JavascriptExecutor) driver;
actionClass.waitforSeconds(5);
js.executeScript("arguments[0].click();", browser);
actionClass.waitforSeconds(1);
browser.sendKeys(file);
}
String getfile() {
return new File("./src/main/resources/TestData/example.pdf").getAbsolutePath();
}
Не забудьте добавить время ожидания перед действием js click. Это обязательно
Этот код будет выполнять операцию щелчка на WebElement
"мы" через 100 мс:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we);
Еще одно простое решение - использовать Key.RETUEN
Щелкните здесь, чтобы узнать о решении подробнее
driver.findElement(By.name("q")).sendKeys("Selenium Tutorial", Key.RETURN);
Я думаю, что некоторые части приведенного выше кода немного изменились, я изучаю Selenium с помощью JavaScript и нашел 2 варианта, чтобы щелкнуть
Для начала нам нужно найти элемент, который мы хотим щелкнуть, это может быть By (id, class и т. д.), вот как, https://www.youtube.com/watch?v=BQ-9e13kJ58&amp;list=PLZMWkkQEwOPl0udc9Dap2NbEAkwkdOTV3.
Внизу есть 2 способа, о которых я говорю:
FIRST Method:
await driver.findElement(By.id("sampletodotext")).sendKeys("Learning Selenium", Key.RETURN);
- Here we found an empty field by it's Id, and then we write "Learning Selenium" in this field with the sendKeys().
- Key.RETURN: Simulate the person pressing the ENTER key in keyboard.
SECOND Method:
await driver.findElement(By.id("sampletodotext")).sendKeys("Learn Selenium");
await driver.findElement(By.id("addbutton")).click().finally();
- The difference here, is we switched the Key.RETURN of the FIRST method, for the entire second line, in the SECOND method.
Кросс-браузерное тестирование 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 Path, в противном случае браузер запустится, но приложение не сможет (попробуйте оба варианта) .