<html>
    <head>
      <base href="https://bugs.webkit.org/">
    </head>
    <body><span class="vcard"><a class="email" href="mailto:bburg@apple.com" title="Brian Burg <bburg@apple.com>"> <span class="fn">Brian Burg</span></a>
</span> changed
          <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - WebDriver: handle click events on option elements"
   href="https://bugs.webkit.org/show_bug.cgi?id=174710">bug 174710</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">Attachment #317573 Flags</td>
           <td>review?
           </td>
           <td>review-
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - WebDriver: handle click events on option elements"
   href="https://bugs.webkit.org/show_bug.cgi?id=174710#c8">Comment # 8</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - WebDriver: handle click events on option elements"
   href="https://bugs.webkit.org/show_bug.cgi?id=174710">bug 174710</a>
              from <span class="vcard"><a class="email" href="mailto:bburg@apple.com" title="Brian Burg <bburg@apple.com>"> <span class="fn">Brian Burg</span></a>
</span></b>
        <pre>Comment on <span class=""><a href="attachment.cgi?id=317573&action=diff" name="attach_317573" title="Try to fix mac builds">attachment 317573</a> <a href="attachment.cgi?id=317573&action=edit" title="Try to fix mac builds">[details]</a></span>
Try to fix mac builds

View in context: <a href="https://bugs.webkit.org/attachment.cgi?id=317573&action=review">https://bugs.webkit.org/attachment.cgi?id=317573&action=review</a>

Two main issues we need to resolve:

- move isOptionElement to driver-side JS query
- figure out spec-correctness for DOM events

<span class="quote">> Source/WebDriver/ChangeLog:20
> +        (WebDriver::CommandResult::httpStatusCode const): ADd ElementNotSelectable.</span >

Nit: Add

<span class="quote">> Source/WebKit/UIProcess/Automation/Automation.json:430
> +                { "name": "isOptionElement", "type": "boolean", "description": "If the element is an HTML option element" }</span >

The driver should just use a small JS snippet to do this, unless I'm missing something. Unlike the other out-parameters, this can be easily computed using client JS. There are cases where safaridriver does this, for example to see if an <input> is type=file and whether it has "multiple" attribute or not. I don't want to extend the protocol every time we need to do a type test on an element. Reducing message traffic by one message is not important since the REST service and browser are using fast message passing (hopefully). On macOS, our async XPC is basically free.

<span class="quote">> Source/WebKit/UIProcess/Automation/Automation.json:435
> +            "name": "selectOptionElement",</span >

This seems fine, but maybe call it toggleOptionElement?

<span class="quote">> Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:866
> +    auto callback = m_selectOptionElementCallbacks.take(callbackID);</span >

(Someday I'm going to write a generic implementation of this callback mechanism, as it's something we do all over WebKit2.)

<span class="quote">> Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp:613
> +    String elementNotInteractableErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::ElementNotInteractable);</span >

This seems like the right thing to do, but I can't find it in the spec. Should I file bug?

<span class="quote">> Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp:626
> +    if (selectElement->isDisabledFormControl() || optionElement.isDisabledFormControl()) {</span >

Ditto.

<span class="quote">> Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp:632
> +    selectElement->optionSelectedByUser(optionElement.index(), true, selectElement->multiple());</span >

This won't fire mouseover/move/down/up/click events like the spec wants. We'll probably have to simulate those events ourselves as the only way to do it natively would be to try and click the native widgets. I think that would be problematic for dropdown menus as the interaction is a bit more subtle than the DOM events would lead you to believe.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>