Отправка клавиш Tab и Enter с помощью WebDriverJS

Это кажется довольно простым, но это не доставляло мне ничего, кроме неприятностей. У меня есть список UL LI, оформленный в виде вкладок. Когда я тестирую в браузере, когда я нажимаю и фокусируюсь на второй вкладке, затем нажимаю клавишу TAB на клавиатуре и ввожу ее, она фокусируется на 3-й вкладке и выбирает ее.

Я пытаюсь смоделировать это с помощью WebDriverJS со следующим кодом coffeescript в моем тесте, используя chai, onecolor и т. Д. Часть проблемы заключается в том, что я могу заставить все обычные символы работать нормально, но ни один из специальных символов, кажется, работайте с селеном в моих лабораториях соуса, используя эту документацию ПРОТОКОЛ ПРОВОДА JSON. Реализация, которую я использую, взята из http://webdriver.io/, а тесты выполняются в https://saucelabs.com/.

  it 'tab key and enter works', (done) ->
    @timeout 10000
    @driver.waitFor '.tab.active', 10000, =>
      @driver.addValue '.tab:nth-child(2)', ['U+E004', 'U+E007'], (err) =>
        @driver.getElementCssProperty 'css selector', '.tab:nth-child(3)', 'background-color', (err, backgroundColor) =>
          @driver.getElementCssProperty 'css selector', '.tab:nth-child(3)', 'color', (err, color) =>
            onecolor('#ffffff').cssa().should.equal backgroundColor
            onecolor('#000000').cssa().should.equal color
            done()

person James    schedule 02.04.2014    source источник
comment
Похоже, вы используете этот WebDriverJS, который не является WebDriverJS, предоставленный проектом Selenium. (Я говорю это, потому что не могу найти метод addValue в файлах WebDriverJ, предоставленных проектом Selenium.) Не могли бы вы пояснить это?   -  person Louis    schedule 03.04.2014
comment
Правильно, я использую webdriver.io   -  person James    schedule 03.04.2014


Ответы (1)


Вы можете использовать все виды символов Юникода. Для этого вам нужно установить имя ключа в качестве входного значения (с учетом регистра). Например:

client.addValue('.tab:nth-child(2)',['Tab','Enter']) // press TAB + ENTER

or

client.addValue('.tab:nth-child(2)',['Meta','c']) // copy text into clipboard

Если вы не хотите связывать действие нажатия клавиши с каким-либо полем ввода, вы можете использовать команду протокола keys для выполнения этого действия:

client.keys(['Meta','c'])
person ChristianB    schedule 07.04.2014
comment
Сначала я попробовал Tab и Enter, но в документации сказано, что он работает лучше, отправляя U + E004 и U + E007 и т. Д. Я обнаружил, что он не учитывает addValue, если это не поле ввода. Webdriver.io, похоже, не может просто передавать нажатия клавиш, он ожидал, что он будет связан с полем. - person James; 22.04.2014
comment
Это не обязательно! Вы также можете выполнять действия по нажатию клавиш, не связывая их с полем, используя команду протокола keys: client.keys(['Meta','c'], function(err,res){...}). Я знаю, что это нигде не задокументировано, но это будет в версии 2.0.0. - person ChristianB; 22.04.2014
comment
Да, за недокументированный функционал. - person James; 14.05.2014