WebDriver Select Option из CSS-меню Javascript работает в IDE, а не в коде - PullRequest
0 голосов
/ 14 января 2012

У меня возникают проблемы при выборе элемента из выпадающего списка Javascript (то есть элементы в раскрывающемся списке не скрыты в дереве DOM, их нет вообще, пока не нажата ссылка). Я пытался использовать класс Actions таким образом:

    Actions cursor = new Actions(driver);
    cursor.moveToElement(linkThataDropsMenu).perform();
    cursor.click();

Я пытался использовать функцию clickAndWait (), но, по-видимому, ее нет в библиотеках Java webDriver, и я пробовал много вариантов приостановки и щелчка в моем коде, включая щелчок дважды. clickAndHold () также ничего не делает.

Ниже приведено дерево DOM после создания меню. Единственное, что изменяется при нажатии, это вставка div class = "menu"

<div id="divIdActive_2" class="data number active" style="min-height: 21px;">
<a class="opencnl" href="#">
    <span id="opencnlSpan" class="active" style="background-color: 
                             transparent;">800-852-2222</span>
</a>
<img class="tollFree" title="Display name(s) for Toll free function properly on 
                     Verizon Wireless devices, but may be omitted by other carriers on 
                     their devices." src="img/nil.gif">
<input id="customNum" type="hidden" value="8008522222" name="number_2">
<div class="menu">
    <a class="edit" href="#">Change Custom Number</a>
    <a class="copy" href="#">Copy Settings for 0 Selected Lines</a>
    <a class="clear" href="#">Clear Settings For this Line</a>
</div>
</div>

Вот странная часть - я могу заставить меню выпадать из IDE, используя click () или clickAndWait (), и точно такой же локатор. Из моего Java-кода я могу использовать свои локаторы, чтобы собрать текст элемента, который я хочу щелкнуть, но я не могу щелкнуть элемент. У меня есть сотни других команд click в моем Java-коде, которые отлично работают, но не здесь. Есть идеи? Спасибо, что хотя бы прочитали!

Ответы [ 2 ]

0 голосов
/ 20 января 2012

Я понял!Хитрость заключалась в том, чтобы навести курсор мыши на элемент, затем щелкнуть мышью, затем снова навести курсор мыши на элемент, оставив там курсор, а затем схватить вновь визуализированные объекты.Теперь я предполагаю, что до того, как я добавил этот второй moveToElement (), как только щелчок произошел, курсор был выполнен, выполнив все, что ему было предложено, и был собран мусор.Вот мой код для этого - надеюсь, он кому-нибудь поможет!

    Actions cursor = new Actions(driver);
    cursor.moveToElement(customNumberLink).perform();
    cursor.click();     

    // move to SAME element to leave cursor where it is while Javascript runs.
    cursor.moveToElement(customNumberLink).perform();

    // now grab newly generated elements
    WebElement clearLink = customNumberCell.findElement(By.cssSelector("a.clear"));
    clearLink.click();
0 голосов
/ 16 января 2012

Вы пытались использовать функцию isDisplayed ()? Какой бы вариант вы ни выбрали, он должен быть виден до того, как на него можно будет нажать. Итак, вместо clickAndWait (), который имел селен 1, у нас есть element.isDisplayed (). Это имеет неявное ожидание (которое устанавливается при создании драйвера браузера, проверьте документацию). По умолчанию, когда Selenium встречает функцию isDisplayed, он ждет столько времени, прежде чем идти вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...