gpt4 book ai didi

python - Selenium - 单击 anchor 后获取位置

转载 作者:行者123 更新时间:2023-11-28 20:43:50 25 4
gpt4 key购买 nike

我正在尝试检查,当我点击一个 anchor 链接时,某些部分确实位于浏览器的顶部(我希望我在这里是有意义的。)

我的测试看起来像这样:

class Tests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome(chromedriver)
self.accept_next_alert = True
self.driver.set_window_size(1100, 800)
self.base_url = "http://someurl"

def test_anchor(self):
driver = self.driver
driver.get(self.base_url)
driver.implicitly_wait(1)
location = driver.find_element_by_xpath(
"//section[@id='123123']").location
print location

driver.find_element_by_partial_link_text("anchor_text").click()
location = driver.find_element_by_xpath(
"//section[@id='123123']").location
print location

self.assertTrue(False)

断言只是为了让我能看到我的指纹。我从中得到的是,即使我看到 anchor 有效,位置指令也保持不变。所以我想我没有使用正确的功能。

你能想出另一种方法来检查 anchor 上的点击是否达到了预期的效果吗? (要么不看位置,要么以正确的方式看位置)

最佳答案

为了检查 anchor 是否设置为将用户带到正确的位置,我使用了两种类型的测试:

  1. 检查 href a 上的属性元素有一个值,它是与 id 连接的“#”它应该指向的元素。 (是的,我知道通常 URL 可能要复杂得多。我只是编写我的应用程序以便我可以执行这样一个简单的测试。)这会处理我有一个 a 的情况。仅指向另一个元素的元素,无需任何特殊的 JavaScript 处理。

  2. 对于更复杂的情况(例如,如果我在让浏览器滚动窗口之前拦截点击事件),我会在点击元素后检查元素的位置相对于视口(viewport) . .location 的问题field 是相对于文档的,因此不会随着滚动而改变。您可以获得相对于视口(viewport)的位置,如下所示:

    position = driver.execute_script("""
    var rect = arguments[0].getBoundingClientRect();
    return {left: rect.left, top: rect.top};
    """, element)

    哪里element是您想要的元素的坐标。 position对象将是一个包含 "left" 的字典和 "top" x对应的键和 y您的元素相对于视口(viewport)的坐标。如果元素靠近视口(viewport)顶部,则 "top"将为 0 或接近 0。事实是有时浏览器之间存在舍入问题或影响坐标的其他一些因素,因此我不会断言 "top" 是否存在。恰好为 0,但无论哪种方式我都会使用几个像素的容差。

我不会使用屏幕截图比较来执行此测试,因为如果我更改感兴趣元素的样式,这样的测试肯定会失败,即使实际上代码没有问题。

关于python - Selenium - 单击 anchor 后获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28180631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com