Selenium Web-Driver 找不到元素(Selenium IDE 确实找到了它)

Posted

技术标签:

【中文标题】Selenium Web-Driver 找不到元素(Selenium IDE 确实找到了它)【英文标题】:Selenium Web-Driver can't find element (Selenium IDE does find it) 【发布时间】:2020-02-17 08:58:21 【问题描述】:

我在使用我的代码查找元素(要单击的按钮)时遇到问题。我正在使用 Selenium IDE 来查找元素的 xpath 或 css 选择器。奇怪的是 Selenium IDE 确实找到了它,但我的代码没有。

我要选择的元素是一个按钮,单击时会出现一个下拉菜单,我需要单击另一个按钮。

    按钮(按钮 class="js-select uk-button uk-button--select">) Button(li data-field="sapOrderNumber">Auftragsnummer

这是我要选择的类的html

<div class="uk-button-dropdown uk-margin-right" data-uk-dropdown="mode:'click'" aria-haspopup="true" aria-expanded="false">
        <button class="js-select uk-button uk-button--select">
            <span>Filter auswählen</span>
            <i class="icon-arrow-left"></i>
        </button>
        <div class="uk-dropdown uk-dropdown-close uk-dropdown-bottom uk-dropdown--select" aria-hidden="true">
            <ul class="js-filter-select uk-nav uk-nav--select">
                    <li data-field="articleNumber">Artikelnummer</li>
                    <li data-field="dateRange">Zeitraum</li>
                    <li data-field="sapOrderNumber">Auftragsnummer</li>
                    <li data-field="personalReference">persönliche Referenz</li>
                    <li data-field="shipTo">Lieferadresse</li>
                    <li data-field="orderType">Auftragsart</li>
            </ul>
        </div>
    </div>

Selenium IDE 的屏幕截图(Selenium IDE 确实找到并单击按钮)1

我已尝试使用以下代码查找元素:

driver.find_element_by_xpath("//ul[@id='tabs-orderbook']/li/div/div/div/div/div/button").click()
driver.find_element_by_xpath("//button").click()
driver.find_element_by_css_selector(.uk-margin-right > .js-select").click()

这是我得到的错误信息:

NoSuchElementException: 没有这样的元素: 无法定位元素: "method":"xpath","selector":"//ul[@id='tabs-orderbook']/li/div/div/div/ div/div/按钮"

我已经寻找了很长一段时间的答案并且感到沮丧。如果有任何帮助或提示,我将不胜感激。

我正在使用 Chrome(版本 77.0.3865.120)、chrome webdriver(版本 77.0.3865.40)、selenium(版本 3.141.0)

ps。这是我关于堆栈溢出的第一个问题,所以如果您对我如何提问有任何提示,我也将非常感激。

非常感谢,祝您有美好的一天。 :D

【问题讨论】:

请注明 Selenium 版本、浏览器名称、版本和使用的驱动程序版本。 您是否尝试在点击之间添加暂停?很多时候,打开下拉菜单的动画比运行测试慢,所以你需要添加某种等待 【参考方案1】:

据我了解,您想选择类名为“js-select uk-button uk-button--select”的按钮。下面是它的 xpath,

//button[contains(@class, 'js-select uk-button uk-button--select')]

对于选择下面的下拉值是xpath,

//li[contains(text(), 'Auftragsnummer')]

【讨论】:

感谢回答:还是不行,我发现这个xpath (//button[contains(@class, 'js-select uk-button uk-button--select') ]) 在点击后被更改,在点击之前它出现在末尾没有 --select 嗨..不需要提及完整的类名..这个xpath也可以用来查找部分文本。跟随xpath仍然检测到按钮而不提及--select,//button[contains (@class, 'js-select uk-button uk-button')]

以上是关于Selenium Web-Driver 找不到元素(Selenium IDE 确实找到了它)的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit + Selenium`InvalidArgumentException:找不到元素`

Python中的Selenium找不到任何元素

找不到元素 Selenium Python

Python Selenium 找不到元素

selenium 找不到元素 (显式等待 和隐式等待的区别)

Selenium with Java:我找不到元素并单击它