硒蟒:按钮下的元素在单击操作后不久就会折叠



我有一个应用程序,我正在使用Selenium webdriven (python)进行测试。 我有一个元素(比如按钮 A),它有一些底层元素(可点击)说按钮 A1、按钮 A2、按钮 A3

我能够找到元素(按钮A)并单击它。现在我需要找到此元素(按钮 A)下存在的元素总数。

但是,当我单击按钮A时,底层按钮部分会立即展开和折叠。我无法保持该部分打开,以便对底层按钮进行任何进一步操作。

请注意,这不是一个 SELECT 下拉列表,只有当我单击按钮 A 时,底层元素div 才会出现在 html 上。

有没有办法解决这个问题。

这是我使用的小段代码:

driver_element_gear = self.driver.find_element_by_xpath('<some_xpath>') # returns a webelement to work on
self.wait(5)
driver_element_gear.click() # I am able to click on the element
self.wait(5)
# fetch the elements based on class_name to check the number of elements under the gear button
gear_dropdown_class_name = self.gear_dropdown_panel['delete_button']['class_name']
element_data = self.driver.find_elements_by_class_name(gear_dropdown_class_name)
if len(element_data)==3: # getting len as 0 since the elements are not present
return 'Success'

以下是单击按钮 A 并动态添加到页面后显示的 html 内容。

<div class="GKVVQWVDHDD x-view-highlightrow GKVVQWVDJDD">buttonA1</div>
<div class="GKVVQWVDHDD">buttonA2</div>
<div class="GKVVQWVDHDD">buttonA3</div>

按钮一个 html:

<div class="GKVVQWVDG3C" style="margin-top:-8px;right:2px;"></div>

请注意,这有一个齿轮图标(这可能没有写上按钮A)

尝试按照安德森在共享的解决方案中的建议使用等待

locator = "div.GKVVQWVDHDD"
driver_element_gear.click()
wait(self.driver, 10).until(lambda driver: len(driver.find_elements_by_css_selector(locator)) > 0)
gear_dropdown_elements = self.driver.find_elements_by_css_selector(locator)
for element in gear_dropdown_elements:
print element.text
self.wait(2)

但是得到错误:

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

这是按钮 A 展开后的 HTML:

<div class="GKVVQWVDEUC" style="border-width: 1px; z-index: 1107; visibility: visible; height: auto; width: 190px; position: absolute; left: 1485px; top: 169px;">
<div>
<div class="GKVVQWVDKDD GKVVQWVDAL x-ignore" style="border-width: 0px; overflow-x: hidden; height: 110px; width: 190px; position: relative; left: 0px; top: 0px;">
<div class="GKVVQWVDHDD">buttonA1</div>
<div class="GKVVQWVDHDD">buttonA2</div>
<div class="GKVVQWVDHDD">buttonA3</div>
<div class="GKVVQWVDHDD x-view-highlightrow GKVVQWVDJDD">buttonA4</div>
<div class="GKVVQWVDHDD">buttonA5</div>
<div class="GKVVQWVDJK" tabindex="0" style="left: 95px; top: 55px; position: absolute;">
<input class="GKVVQWVDJK" tabindex="-1" role="presentation" style="opacity: 0; height: 1px; width: 1px; z-index: -1; overflow: hidden; position: absolute; border-width: 0px; font-size: 1px; line-height: 1px;" type="text">
</div>
</div>
</div>

我能够通过使用javascript单击来解决问题。

这是代码:

self.driver.execute_script("arguments[0].click()", webElement)

最新更新