无法选择隐藏链接 - 硒

时间:2013-06-25 02:35:22

标签: java selenium webdriver testng

当鼠标悬停在网页中的特定帧时,我必须选择网页链接,按钮(链接到下一页)将会显示。

WebElement mainElement = driver.findElement(By.xpath(<frame xpath >));

Actions builder = new Actions(driver);
builder.moveToElement(mainElement);
WebElement button1 = driver.findElement(By.xpath("//*[@id='currentSkills']/div[1]/div/a"));
builder.moveToElement(button1).click().perform();

我仍无法选择特定链接 当我执行时,出现以下错误 org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:131毫秒

但是当我在AUT期间将鼠标指针悬停在特定的帧上时(只是为了移动到特定的帧而不点击任何东西),那么测试正在成功执行。

我知道这可以由JS处理。但我想知道selenium webdriver中是否有任何解决方案

4 个答案:

答案 0 :(得分:1)

在各种浏览器的某些驱动程序上,除非您在创建驱动程序时明确启用本机事件,否则有时这样的自定义操作将无效:

FirefoxProfile profile = new FirefoxProfile();   
profile.setEnableNativeEvents(true);     
driver = new FirefoxDriver(profile);

或在为远程驱动程序创建DesiredCapabilities时设置它的另一种方法

DesiredCapabilities desiredCapabilities = DesiredCapabilities.internetExplorer();
desiredCapabilities.setCapability("nativeEvents", true);

答案 1 :(得分:0)

使用Action Chains时,我总是发现在同一个链中执行所有操作更可靠。因此,不要“暂停”找到现在显示的元素,而是在链中尝试这样做。

WebElement mainElement = driver.findElement(By.xpath(<frame xpath >));
Actions builder = new Actions(driver);
builder.moveToElement(mainElement).moveToElement(driver.findElement(By.xpath("//*[@id='currentSkills']/div[1]/div/a"))).click().perform();

希望这会有所帮助。

答案 2 :(得分:0)

我的视图需要在对象上执行鼠标悬停以使其可见,然后单击该元素。

WebElement mainElement = driver.findElement(By.xpath(<frame xpath >));

Actions builder = new Actions(driver);

builder.moveToElement(mainElement).moveToElement(driver.findElement(By.xpath("//*[@id='currentSkills']/div[1]/div/a"))).build().perform();

driver.findElement(By.xpath("//*[@id='currentSkills']/div[1]/div/a")).click();

请告诉我上述脚本是否有效。

答案 3 :(得分:0)

FirefoxProfile profile = new FirefoxProfile();   
         profile.setEnableNativeEvents(true);     
         driver = new FirefoxDriver(profile);    

WebElement searchBtn = driver.findElement(By.xpath(""));
    WebElement searchBtn1 = driver.findElement(By.xpath(""));
    Actions action = new Actions(driver);
    action.moveToElement(searchBtn).moveToElement(searchBtn1).click().build().perform();