2014-12-09 4 views
4

Я не понимаю, почему это не работает. Веб-приложение, которое я тестирую, имеет всплывающее окно, которое создается при нажатии кнопки. Это всплывающее окно содержит таблицу, каждая из которых является интерактивной. Я пробовал множество реализаций Actions, выбора строки таблицы и т. Д., Но ничего не работает. Элемент виден Selenium, он просто не нажмет на него. Ошибка также не возникает.Selenium: действия.moveToElement.click не работает

ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ. Я проверил метод Action с другими элементами, и он работает, поэтому он должен использоваться в качестве селектора или как он его видит. Очень странное поведение. Я также проверил его в Firefox с помощью Selenium IDE, и weblement.click() будет работать с селектором CSS с этим.

public class ContactDetails { 
    WebDriver driverInstance; 

public ContactDetails(WebDriver driver){ 
    this.driverInstance = driver; 
} 

public void enterContactDetails(){ 

    //Other code here... 

    By validAddress = By.cssSelector("#customerAddress > tbody > tr:nth-child(1) > td"); 
     //Validate that the element is visible. Definitely working as intended because I use it elsewhere in the code successfully. 
     if (Helper.checkElementVisible(driverInstance, validAddress)){ 
      //if visible: 
      WebElement selectAddress = driverInstance.findElement(validAddress); 
      //Helper.scrollToElementAndClick(driverInstance, selectAddress); 
      Actions actions = new Actions(driverInstance); 
      actions.moveToElement(selectAddress).click().perform(); 
     } 
    } 
} 

Helper Класс:

public class Helper { 

    public static void scrollToElementAndClick(WebDriver driver, WebElement webelement){ 
    Actions actions = new Actions(driver); 
    actions.moveToElement(webelement).click().perform(); 
} 

Самое странное в том, что он работал нормально пару раз, когда я сделал эту реализацию. Затем я помещаю код Actions в уже прокомментированный метод Helper.scrollToElementAndClick() и он перестает работать. Затем, когда я вернулся к этой реализации, он тоже не работал!

Я не могу отправить изображение всплывающего окна, потому что он раскроет конфиденциальную информацию, но вот некоторые примеры HTML из всплывающего окна с фиктивными данными:

<div class="someDiv" tabindex="-1" role="dialog" aria-labelledby="ui-1" 
style="height: auto; width: 600px; top: 175px; left: 364px; display: block;"> 
    <div class="anotherDiv"> 
    <span id="ui-1" class="ui-title"></span> 
    <button class="ui-title-close" role="button" aria-disabled="false" title="close"> 
     <span>close</span> 
    </button> 
    </div> 
    <div id="validateCustomerAddress" class="ui-content" style="width: auto; min-height: 0px; max height: none; height: 230px;"> 
<h2 class="aSection" style="color:#666666">Valid Addresses:</h2> 
<table id="customerAddress"> 
    <tbody> 
    <tr> 
     <td>ZIP CODE: N/A</td> 
    </tr> 
    <tr> 
     <td>2 POPLAR WAY</td> 
    </tr> 
    <tr> 
     <td>KINSEY DRIVE</td> 
    </tr> 
    </tbody> 
</table> 
</div> 
</div> 
+0

Поскольку это всплывающее окно, попробуйте добавить [Явное ожидание] (http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits), чтобы проверить наличие элемента первым и затем выполните код с ** классом действий **. – Subh

+0

@Subh попробовал это и добавил проверку println, чтобы быть уверенным. В соответствии с явным ожиданием элемент присутствует и доступен для клика, но щелчок не регистрируется. – adohertyd

+0

Хорошо. Можете ли вы добавить соответствующий фрагмент кода HTML и изображение всплывающего окна? Кроме того, если вы публичный сайт, который вы автоматизируете, можете ли вы указать URL-адрес? – Subh

ответ

3

Try комбинируя все действия в одно действие, как показано ниже и попробуй еще раз.

public class Helper { 

public static void scrollToElementAndClick(WebDriver driver, WebElement webelement){ 
Actions actions = new Actions(driver); 
actions.moveToElement(webelement).click(); 

action = action.build; 
action.perform(); 

} 

Также вы можете попробовать JavascriptExecuter, как показано ниже:

((JavascriptExecutor)driver).executeScript("arguments[0].click();", selectAddress); 

Также рассмотреть возможность в td, содержащую какой-либо другой элемент (вход, ссылка), которая может быть нажата (я не знаю ваш HTML код).

+0

Спасибо за ваш вклад. Я пробовал различные версии вашего кода выше, но он все еще не работает. Элемент отображается и доступен для просмотра (проверяется Selenium '.isClickable()'), но щелчок просто не регистрируется. Я даже положил println после действия click, и он печатается на консоль, поэтому есть что-то еще неправильное. – adohertyd

+0

, пожалуйста, напишите соответствующий html-код, если возможно – Sighil

+0

Код HTML теперь добавлен – adohertyd

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