Кошмар .click событие onclick

Я пытаюсь щелкнуть элемент onclick. Источник целевого сайта

    <td class="td-03">
        <p class="td-03">hogehoge</p>
    </td>
    <td class="td-04">
        <p class="td-04">
            <input class="btn btn-sm btn-success" onclick="this.form.f_comp_no.value=117111;this.form.f_acnt_no.value=431174;" type="submit" value="select1">
        </p>
    </td>
</tr>
<tr>
    <td class="td-01">
        <p class="td-01">2</p>
    </td>
    <td class="td-02">
        <p class="td-02">162343</p>
    </td>
    <td class="td-03">
        <p class="td-03">foofoo</p>
    </td>
    <td class="td-04">
        <p class="td-04">
            <input class="btn btn-sm btn-success" onclick="this.form.f_comp_no.value=11143;this.form.f_acnt_no.value=423271;" type="submit" value="select2">
        </p>
    </td>
</tr>

Я хочу нажать «выбрать2».

Я пробовал это, но это не работает:

.click('[input[onclick=this.form.f_comp_no.value=11143;this.form.f_acnt_no.value=423271;]')

Как щелкнуть элемент .select2?

Спасибо.


person rluisr    schedule 07.06.2016    source источник
comment
опубликовать правильный и полный html   -  person guradio    schedule 07.06.2016
comment
Было бы намного, намного проще (а также гораздо лучше) вызывать функцию по щелчку элемента .select2, а затем вызывать эту функцию везде, где это требуется в вашем коде.   -  person Rory McCrossan    schedule 07.06.2016
comment
Прошу прощения за ошибку. То же имя значения. ‹input class=btn btn-sm btn-success onclick=this.form.f_comp_no.value=117111;this.form.f_acnt_no.value=431174; type=submit value=select1› ‹input class=btn btn-sm btn-success onclick=this.form.f_comp_no.value=11143;this.form.f_acnt_no.value=423271; type=submit value=select1> Разница в элементе onclick...   -  person rluisr    schedule 07.06.2016
comment
.click('input[onclick*="423271"]') вам подходит?   -  person Artjom B.    schedule 07.06.2016
comment
@ArtjomB.Спасибо за ответ! Я пробовал, но не работает... Потом попробовал .click('input[type=submit]') тоже не работает...   -  person rluisr    schedule 08.06.2016
comment
@rluisr Как проверить, был ли щелчок успешным? Как обычно ведет себя страница и что происходит при клике? Покажите недостающий код и, в идеале, MCVE.   -  person Artjom B.    schedule 08.06.2016


Ответы (2)


"Как щелкнуть элемент .select2?"

$(".btn[value='select2']").click();
person Julien    schedule 07.06.2016
comment
Спасибо ответ. Прошу прощения за ошибку. То же имя значения. ‹input class=btn btn-sm btn-success onclick=this.form.f_comp_no.value=117111;this.form.f_acnt_no.value=431174; type=submit value=select1› ‹input class=btn btn-sm btn-success onclick=this.form.f_comp_no.value=11143;this.form.f_acnt_no.value=423271; type=submit value=select1> Разница в элементе onclick... - person rluisr; 07.06.2016
comment
@coyotte508 Спасибо за ответ! Пробовал .click('input[value='select1'][1]') не работает... - person rluisr; 08.06.2016
comment
@ coyotte508 Спасибо за ответ. Я пробовал .click("input[type='submit']")[1], но это ошибка. Я использую Кошмар. .click метод не поддерживает [i]. простите... пожалуйста, научите меня... - person rluisr; 10.06.2016

Одна (очевидная) вещь:

Код может быть внутри evaluate():

nightmare
   .goto(page)
   .evaluate( () => {
       /* Inside browser context, no access to variables from the nodejs
          program unless they are passed as an argument */
       /* using jQuery if it's loaded in the page */
       $(".btn[value='select1']")[1].click();
       /* using native JS api */
       document.querySelectorAll("input[value='select1']")[1].click();
       /* In both cases the [1] refers to the second element matching the css
          selector */

       /* If returning a value here, will be the parameter of the callback
          function of the next .then() */
   }).doStuff....

Посмотрите документацию для evaluate(): как передать ему аргументы, как получить от него значение.

Если вы хотите сделать click() из nightmare, это сложнее, вам нужно найти точный селектор css, чтобы найти ваш элемент напрямую.

К счастью, это возможно в CSS3.

Итак, вы можете сделать:

nightmare
   .goto(page)
   .click(".btn[value='select1']:nth-of-type(2)")
   .doStuff....

Все это предполагает, что у вас есть два элемента со значением select1 и вы хотите щелкнуть второй, если ваш второй элемент на самом деле имеет значение select2, тогда это сработает:

nightmare
   .goto(page)
   .click(".btn[value='select2']")
   .doStuff....
person coyotte508    schedule 10.06.2016