Selenium Web 驱动程序:无法滚动到视图中 [英] Selenium web driver: cannot be scrolled into view

查看:39
本文介绍了Selenium Web 驱动程序:无法滚动到视图中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Eclipse 中使用 Selenium IDE 和 Selenium Web 驱动程序 testng ..我的测试是针对 ZK 应用程序的..

测试用例在 Selenium IDE 上运行良好..

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head profile="http://selenium-ide.openqa.org/profiles/test-case"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><头><tr><td rowspan="1" colspan="3">work it2</td></tr></thead><tbody><tr><td>打开</td><td>/xxx</td><td></td></tr><tr><td>点击</td><td>//li[2]/div/div/div/span</td><td></td></tr><tr><td>暂停</td><td>3000</td><td>3000</td></tr><tr><td>doubleClick</td><td>//div[2]/div[2]</td><td></td></tr><tr><td>暂停</td><td>3000</td><td>3000</td></tr></tbody></table>

但是当我使用 selenium web 驱动程序 (testng) 在 Eclipse 中运行它时,我得到了一个错误..

 selenium.open("xxx");selenium.click("//li[2]/div/div/div/span");线程睡眠(3000);selenium.doubleClick("//div[2]/div[2]");线程睡眠(3000);

我也把代码改成

 driver.get("xxx");driver.findElement(By.xpath("//li[2]/div/div/div/span")).click();线程睡眠(3000);WebElement ee = driver.findElement(By.xpath("//div[2]/div[2]"));动作动作=新动作(驱动程序);action.doubleClick(ee).perform();线程睡眠(3000);

也出现同样的错误...

错误在这一行

//div[2]/div[2]

<块引用>

com.thoughtworks.selenium.SeleniumException:元素内的偏移无法滚动到视图中:(87, 118): [object XrayWrapper [objectHTMLDivElement]] 命令持续时间或超时:63 毫秒 Build信息:版本:'2.39.0',修订版:'ff23eac',时间:'2013-12-1616:11:15'系统信息:主机:'EnD',ip:'192.168.17.76',os.name:'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version:1.7.0_51"会话 ID:3b79783c-2558-4c87-bd51-a72821696040 驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver 功能[{platform=XP, acceptSslCerts=true, javascriptEnabled=true,cssSelectorsEnabled=true,databaseEnabled=true,browserName=firefox,handlesAlerts=true,browserConnectionEnabled=true,webStorageEnabled=true, nativeEvents=false, rotatable=false,locationContextEnabled=true,applicationCacheEnabled=true,takeScreenshot=true, version=27.0.1}]

解决方案

Naif,

实际上,您上面的问题与实际问题不同,因此您应该将其作为单独的问题提出.不过,我正在回答你之前的问题.

错误是因为您尝试单击的元素不可见.在单击元素之前,它应该是可见的.您可以通过以下方式执行此操作 -

WebElement element = driver.findElement(By.xpath("//div[2]/div[2]"));WebDriverWait wait = new WebDriverWait(driver, 20);//这里,等待时间是20秒wait.until(ExpectedConditions.visibilityOf(element));//这将等待元素可见 20 秒元素点击();//现在点击元素

如果上面不起作用,您可以通过执行javascript来单击元素(但这不是一个好习惯)

JavascriptExecutor js = (JavascriptExecutor)driver;js.executeScript("arguments[0].click();", element);

I am using Selenium IDE and Selenium web driver testng in eclipse .. my testing is against ZK application ..

the test case works fine on Selenium IDE ..

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="http://*****/>
<title>work it2</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">work it2</td></tr>
</thead><tbody>
<tr>
    <td>open</td>
    <td>/xxx</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//li[2]/div/div/div/span</td>
    <td></td>
</tr>
<tr>
    <td>pause</td>
    <td>3000</td>
    <td>3000</td>
</tr>
<tr>
    <td>doubleClick</td>
    <td>//div[2]/div[2]</td>
    <td></td>
</tr>
<tr>
    <td>pause</td>
    <td>3000</td>
    <td>3000</td>
</tr>
</tbody></table>
</body>
</html>

but when I run it in eclipse with selenium web driver (testng) I got an error ..

    selenium.open("xxx");
selenium.click("//li[2]/div/div/div/span");
Thread.sleep(3000);
selenium.doubleClick("//div[2]/div[2]");
Thread.sleep(3000);

I also changed the code to

 driver.get("xxx");

        driver.findElement(By.xpath("//li[2]/div/div/div/span")).click();
        Thread.sleep(3000);
        WebElement ee = driver.findElement(By.xpath("//div[2]/div[2]"));
        Actions action = new Actions(driver);
        action.doubleClick(ee).perform();
        Thread.sleep(3000);

also getting the same error ...

the error was in this line

//div[2]/div[2]

com.thoughtworks.selenium.SeleniumException: Offset within element cannot be scrolled into view: (87, 118): [object XrayWrapper [object HTMLDivElement]] Command duration or timeout: 63 milliseconds Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15' System info: host: 'EnD', ip: '192.168.17.76', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_51' Session ID: 3b79783c-2558-4c87-bd51-a72821696040 Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=27.0.1}]

解决方案

Naif,

Actually, your above question is different than the actual question hence you should have asked it as a separate question. Still, I'm answering to your previous question.

The error is because the element you're trying to click on isn't visible. Before you click on element, it should be visible. You can do this by following -

WebElement element = driver.findElement(By.xpath("//div[2]/div[2]"));
WebDriverWait wait = new WebDriverWait(driver, 20); //here, wait time is 20 seconds

wait.until(ExpectedConditions.visibilityOf(element)); //this will wait for elememt to be visible for 20 seconds
element.click(); //now it clicks on element

If above doesn't work, you can click on element by executing javascript(but this isn't a good practice)

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);

这篇关于Selenium Web 驱动程序:无法滚动到视图中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆