java 硒:actions.moveToElement.click 不起作用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27385780/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Selenium: actions.moveToElement.click not working
提问by adohertyd
I can't understand why this isn't working. The Web app that I'm testing has a pop up box that is generated on clicking a button. This popup box contains a table, each row of which is clickable. I have tried numerous implementations of Actions, table row selection etc. but nothing is working. The element is visible to Selenium, it just won't click it. No error is being thrown either.
我不明白为什么这不起作用。我正在测试的 Web 应用程序有一个在单击按钮时生成的弹出框。这个弹出框包含一个表格,其中的每一行都是可点击的。我尝试了多种操作、表格行选择等实现,但没有任何效果。该元素对 Selenium 可见,只是不会点击它。也没有抛出错误。
ADDITIONAL NOTE: I've checked the Action method with other elements and it works so it has to be the selector being used or how it is seeing it. Very strange behaviour. I've also checked it in Firefox with the Selenium IDE and weblement.click() will work on the CSS selector with that.
附加说明:我已经用其他元素检查了 Action 方法并且它可以工作,所以它必须是正在使用的选择器或它是如何看待它的。非常奇怪的行为。我还使用 Selenium IDE 在 Firefox 中检查过它,并且 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 Class:
辅助类:
public class Helper {
public static void scrollToElementAndClick(WebDriver driver, WebElement webelement){
Actions actions = new Actions(driver);
actions.moveToElement(webelement).click().perform();
}
The strangest thing is that it worked ok a couple of times when I did this implementation. I then put the Actions code into the now commented out Helper.scrollToElementAndClick()
method and it stopped working. Then when I went back to this implementation it wasn't working either!
最奇怪的是,当我执行此实现时,它运行了几次。然后我将 Actions 代码放入现在注释掉的Helper.scrollToElementAndClick()
方法中,它停止工作。然后当我回到这个实现时,它也不起作用!
I can't post an image of the popup because it would reveal sensitive info but here is some sample HTML of popup with dummy data:
我无法发布弹出窗口的图像,因为它会显示敏感信息,但这里有一些带有虚拟数据的弹出窗口示例 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>
采纳答案by Sighil
Try combining all the action into one action as shown below and try again.
尝试将所有操作合并为一个操作,如下所示,然后重试。
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();
}
Also you can try JavascriptExecuter
as shown below:
您也可以尝试JavascriptExecuter
如下所示:
((JavascriptExecutor)driver).executeScript("arguments[0].click();", selectAddress);
Also consider the possibility of the td
containing some other element (input, link) which can be clicked(I dont know your html code).
还要考虑td
包含一些可以点击的其他元素(输入、链接)的可能性(我不知道你的 html 代码)。