我运行selenium的网站有一些组件从屏幕上掉下来。我试图向下滚动它,缩小页面以使其适合等等。它是一个div模式,包含一个我需要按下的按钮。
以下是我以前的尝试:
1)滚动到该位置 第一个问题是每当我尝试滚动,使用代码或在窗口中使用我自己的鼠标时,所有会发生的事情是模态后面的页面会滚动而不是模态本身滚动。这只在运行Selenium时发生。因此,以下代码不起作用。
JavascriptExecutor js = ((JavascriptExecutor)driver);
js.executeScript("window.scrollTo(0," + driver.findElement(By.xpath("//*[@id=\"manual-order-modal-ignore-validation\"]")).getLocation().x + ")");
它实际上滚动但是就像我上面说的那样,必要的元素永远不会出现在屏幕上。
2)缩小#1
我尝试使用Javascript缩小完成工作的页面,但它显然抛弃了我的Selenium驱动程序,因为它试图点击按钮的原始位置而无法在那里找到它。
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.body.style.zoom='80%'");
同样,我也尝试使用以下解决方案,但它也没有用。
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.body.style.transform='scale(0.8)'");
3)缩小#2
我尝试发送多个击键但我唯一得到的是一个错误,说“无法聚焦元素”
WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.COMMAND, Keys.SUBTRACT));
4)缩小#3
我尝试使用机器人类,但它根本没有滚动,只是坐在那里。
for (int i=0; i< 6; i++)
{
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_MINUS);
System.out.println("zoom out")
}
“缩小”会被打印,但不会采取任何操作。
正如你所看到的,我已经抬头并尝试了许多解决方案,但无济于事。如果您对如何解决此问题有任何想法,我们将不胜感激!提前谢谢。
答案 0 :(得分:1)
我们也可以使用Sikuli进行滚动。它有3个滚动功能,可以帮助你:
screen.wheel(direction, steps);
screen.wheel(target, direction, steps);
screen.wheel(target, direction, steps, stepDelay);
示例:
import org.sikuli.script.Button;
button = new Button();
screen.wheel(RegionForScroll, button.WHEEL_UP, 5);
答案 1 :(得分:0)
您可以尝试以下操作:
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id=\"manual-order-modal-ignore-validation\"]"))));
Actions action = Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id=\"manual-order-modal-ignore-validation\"]"))).build().perform();
<强>更新强>
JavascriptExecutor js =((JavascriptExecutor)驱动程序);
js.executeScript(&#34;参数[0] .click();&#34;,driver.findElement(By.id(&#34;您的元素ID&#34;));
答案 2 :(得分:0)
所以即使我永远不能向下滚动按钮,结果你可以通过在selenium中执行Javascript来点击它。这有点hacky但是我的方法就是这样:
((JavascriptExecutor)driver);
js.executeScript("document.getElementById(\"manual-order-save-button\").click()");
这样做让我可以点击它而不会看到它。
免责声明:我意识到这不符合UI自动化的精神,因为它不能很好地模拟用户的操作,但是如果你陷入像我这样WebDriver行为不正确的情况,这个黑客可能有用。
感谢kushal的输入。