Я не понимаю, почему это не работает. Веб-приложение, которое я тестирую, имеет всплывающее окно, которое создается при нажатии кнопки. Это всплывающее окно содержит таблицу, каждая из которых является интерактивной. Я пробовал множество реализаций 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>
Поскольку это всплывающее окно, попробуйте добавить [Явное ожидание] (http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits), чтобы проверить наличие элемента первым и затем выполните код с ** классом действий **. – Subh
@Subh попробовал это и добавил проверку println, чтобы быть уверенным. В соответствии с явным ожиданием элемент присутствует и доступен для клика, но щелчок не регистрируется. – adohertyd
Хорошо. Можете ли вы добавить соответствующий фрагмент кода HTML и изображение всплывающего окна? Кроме того, если вы публичный сайт, который вы автоматизируете, можете ли вы указать URL-адрес? – Subh