【问题标题】:Receiving selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element message接收 selenium.common.exceptions.NoSuchElementException:消息:无法定位元素消息
【发布时间】:2016-10-11 03:04:07
【问题描述】:

我是该网站的新手。我正在尝试选择/单击 http://autotask.net 上的元素。我尝试使用以下方法查找元素:

driver.find_element_by_css_selector('#HREF_btnPrint > img:nth-child(1)') driver.find_element_by_xpath('browser.find_element_by_xpath('/html/body/form[1]/div[2]/div[1]/ul/li[2]/a/img')

...但它给了我标题中的例外。

我可以在登录页面上找到很好的元素(即“用户名”“密码”字段),但是一旦我登录 - selenium 在页面上找不到任何元素。

我现在只学习/编码 python 几个星期了,我对 Java 一无所知。如果您需要更多信息,请告诉我 - 谢谢。

【问题讨论】:

    标签: java python-3.x


    【解决方案1】:

    我不确定 python 语法,所以我将使用 Java。我认为有两种可能的情况,首先您的驱动程序在页面加载时查看 DOM 结构。另一个是 Web 驱动程序不指向 DOM 的根。我一般有wait方法,等到页面加载完毕,切换到默认内容再找一些元素。

    首先,我通过构造函数传递 WebDriver、元素 id 和元素名称。然后我有waitUntilReady(),它实现了在特定超时内检查元素是否存在的逻辑。

        public void waitUntilReady() {
                WebDriverWait waiter = new WebDriverWait(getWebDriver(), 30);
                waiter.withMessage("\"" + getElementName() + "\" is not ready in 30 seconds")
                        .until(new Predicate<WebDriver>() {
                            @Override
                            public boolean apply(WebDriver input) {
                                /* isReady() returns true if all elements 
                                 * that you need to test are available. 
                                 * Note that if you have javascript, you 
                                 * should have some hidden field to tell 
                                 * you that the whole page has loaded. */
                                return isReady();
                            }
                        });
            }
    

    以及在找到元素之前切换到默认内容

    WebElement getWebElement() {
        WebElement webElement;
        try {
            getWebDriver().switchTo().defaultContent();
            webElement = getWebDriver().findElement(By.id(elementId));
        } catch (NoSuchElementException ex) {
            getLogger().log(Level.SEVERE, "Element id '" + elementId + "' does not exist");
            throw ex;
        }
        return webElement;
    }
    

    如果不行,可以&lt;body id="container"&gt;,然后用 driver.findElementById("container").findElementById("your target element")

    【讨论】:

    • 我对 Java 不熟悉。我得到你所说的 然后找到元素 byid 方法。我需要 python 语法在元素中查找元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多