selenium automation移动站点:等待隐藏元素

问题描述 投票:0回答:1

我有隐藏元素的问题。该网站已满载,因此每个项目都可用,无需加载,切换页面。我尝试了ExpectedConditions的所有选项,但仍未等待元素。使用Find函数我得到位置,但x,y坐标是:( - 125,156)因此无法单击它(在屏幕上也不可见)非常糟糕的解决方法是while + Thread.Sleep( 1000);和一个计数器..而x> 0和> 0我想避免..任何想法? enter image description here代码示例:

    ChromeOptions chromeCapabilities = new ChromeOptions();
    chromeCapabilities.EnableMobileEmulation("iPhone 7");

    IWebDriver webDriver = new ChromeDriver(chromeCapabilities);
    webDriver.Manage().Window.Maximize();
    webDriver.Navigate().GoToUrl("https://m.exmaple.org");

    WebDriverWait driverWait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(30.0));

    IWebElement menu_1;
    IWebElement switch_left;

    switch_left = webDriver.FindElement(By.Id("item_1"));
    switch_left.Click(); // ~3-5 sec while switched left because of animations


    driverWait.Until(ExpectedConditions.ElementToBeClickable(By.Id("item_1"))));
    menu_1 = webDriver.FindElement(By.Id("item_1"));
    menu_1.Click(); System.InvalidOperationException: 'unknown error: Element is not clickable at point (-125, 156)
c# selenium selenium-webdriver selenium-chromedriver webdriverwait
1个回答
1
投票

如果我正确理解您的问题,那么当您在浏览器框架之外时,您尝试单击该元素。您需要一种方法来等待元素在单击后移动到框架中。没有内置方法来执行此操作,因此您需要自定义等待。

你应该可以使用类似下面的东西。它基本上等到元素的X / Y坐标(技术上是左上角)在浏览器框架内。我认为这对你有用。

public IWebElement WaitForElementToBeOnscreen(By locator)
{
    WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
    wait.Until<IWebElement>(d =>
    {
        IWebElement element = d.FindElement(locator);
        if (element.Location.X > 0 &&
            element.Location.X < Driver.Manage().Window.Size.Width &&
            element.Location.Y > 0 &&
            element.Location.Y < Driver.Manage().Window.Size.Height)
        {
            return element;
        }

        return null;
    });

    return null;
}

注意:为了使其更加准确,您可以考虑元素的大小。例如,确保X大于0且小于窗口宽度 - 元素的宽度......依此类推。

您可能遇到的另一个问题是,如果元素永远不会移动......它会停留在浏览器框架之外。如果发生这种情况,则等待将超时。在这种情况下,我不确定你想要做什么...你可以把它包裹在try-catch中并返回null或你决定的其他任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.