【问题标题】:How to get the z-index attribute of an element using Selenium through Python?如何通过 Python 使用 Selenium 获取元素的 z-index 属性?
【发布时间】:2019-03-23 04:15:28
【问题描述】:

有人告诉我,我可以检查 Web 元素的“z-index”属性来检查它们的深度。 我首先使用以下两个语句之一来成功定位元素。

e = WebDriverWait(tA.driver,1).until(EC.visibility_of_element_located((By.XPATH, xPath)))
e = WebDriverWait(tA.driver, 1).until(EC.element_to_be_clickable((By.XPATH, xPath)))

然后我在firefox和win10上使用了以下python代码:

zi = e.value_of_css_property("z-index")

网页网址为https://irs.thsrc.com.tw/IMINT/,其中有一个弹出消息框。

我认为这个盒子的 z-index 应该是 1,其他元素应该是 0。但是,使用上面的 python 语句会使 Selenium 返回“自动”到我的所有查询。 我读到有人建议 z-index 查询不适用于位置值为“静态”的元素。 所以在以下页面中:http://aludratest.github.io/aludratest/xref/org/aludratest/service/gui/web/selenium/selenium2/ZIndexSupport.html 重复查询“z-index”属性,直到它不是“auto”。
但是我尝试了这个,它在几次试验后导致定位失败。

我的问题如下:

  1. 在这种情况下我可以更改元素的位置属性吗?
  2. 如果我更改元素的位置属性,它会起作用吗?

谢谢

【问题讨论】:

  • z-index 代表哪个元素?
  • 嗨,亲爱的:我需要收集所有可操作元素的 z-indices,然后比较它们的 z-indices,看看哪些在其他元素之上。

标签: python css selenium z-index webdriverwait


【解决方案1】:

看来你很接近了。所需元素是一个动态元素,因此要找到您必须为visibility_of_element_located() 诱导WebDriverWait 的元素,您可以使用以下Locator Strategies 之一:

  • CSS_SELECTOR:

    print(WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.ui-dialog.ui-widget.ui-widget-content.ui-corner-all"))).value_of_css_property("z-index"))
    
  • XPATH:

    print(WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='ui-dialog ui-widget ui-widget-content ui-corner-all ']"))).value_of_css_property("z-index"))
    
  • 控制台输出:

    1002
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

【讨论】:

  • 谢谢!我稍后会尝试,看看这是否能解决我的问题。但我也在实验中使用了firefox。如果您向我展示如何使您的解决方案适应 Firefox,这是否可能。或者我可以做一些简单的替换吗?
  • 嗨,亲爱的 Debanjan:我刚刚尝试了 EC.visibility_of_element_located(...) 语句,但没有成功。如果您能解释这些选项的用途,我将不胜感激?我可以用 firefox 做这些选项吗?谢谢
  • @FarnWang 选项是使 Chrome 浏览器最大化。我已经删除了它们。现在该解决方案应该可以跨浏览器工作了。
  • 我试过了,但没有运气。 firefox 和 webdriver 总是返回“auto”。也许是因为Firefox。我明天试试,然后向你汇报。感谢您的耐心等待。
  • 嗨,亲爱的 Debanjan:我也试过 Chrome,不知何故返回的值都是“自动”的。我还导入了您要求的三个模块。但仍然没有运气。对于 Chrome,答案仍然是“自动”。会不会是win10?还是蟒蛇?
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2020-10-30
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多