2015-09-02 2 views
1

Я новичок в Java и Selenium, и я наткнулся на JavascriptExecutor во время работы.Зачем нам нужно указывать драйвер Firefox для javascript-исполнителя?

Хочет узнать: хотя удаленный webdriver и драйвер Firefox реализуют javascript-исполнитель, почему я не могу напрямую использовать метод executeScript() и почему его следует придумать, чтобы получить доступ?

Вот программа для яваскрипта исполнителя:

public class entertextwithoutsendkeys 
{ 
    WebDriver driver; 

    public entertextwithoutsendkeys() 
    { 
     driver = new FirefoxDriver(); 
    } 

    @Test 
    public void entertextpgm() 
    { 
     driver.get("https://www.gmail.com/"); 
     JavascriptExecutor executor = (JavascriptExecutor) driver; 
     executor.executeScript("document.getElementById('Email').value='sh'"); 
    } 
} 
+1

Привет, добро пожаловать в SO! Когда вы отправляете блоки кода, лучший способ отформатировать его - поставить 4 пробела в начале каждой строки. Это облегчает чтение всем читателям, что дает вам больше шансов получить помощь. – JeffC

+0

Следуйте за приведенной ниже ссылкой, у которой есть прекрасное объяснение: - https://stackoverflow.com/questions/21877839/can-any-one-explain-screenshot-in-selenium/24311949#24311949 – Rancho

ответ

2

Вашего driver переменного (поле, на самом деле) объявлен как типа WebDriver.

С FirefoxDriver инвентарь WebDriver, вы можете без проблем направить new FirefoxDriver() на driver.

Теперь вы хотите выполнить некоторую команду JavaScript. Для этого вы должны использовать метод executeScript() интерфейса JavascriptExecutor.

JavascriptExecutor не имеет никакого отношения к интерфейсу WebDriver (этот пример не распространяется, например,), но FirefoxDriver происходит для реализации обоих.

Таким образом, даже если ваша driver переменная рассматривается как WebDriver (из-за его заявления), он на самом деле имеет в качестве значения экземпляра FirefoxDriver - таким образом, его значение являетсяJavascriptExecutor, а также (потому что FirefoxDriver implements JavascriptExecutor).

Тем не менее, вы должны найти способ «смотреть на» этой driver переменной, как если бы она была JavascriptExecutor, так что вы можете выполнять методы этого интерфейса (как executeScript()). Способ для этого, этот «смотрящий», лидирует, как и вы.

Вам не нужно было делать какие-либо приведения, если вы заявили driver от FirefixDriver. Попробуй сам.

Смежные вопросы