如何使用selenium webdriver基于其坐标单击元素

时间:2017-09-29 21:43:01

标签: python selenium testing webdriver

因此,我们正在开发的网络应用程序具有TV / PC模式,并且我正在测试在这两种模式之间传输的能力。 `

 def pc_to_tv(self):
        pc_to_tv = self.driver.find_element_by_xpath(
            'html/body/div[1]/div/topbar/header/div[2]/div[2]/div[1]/button[1]')
        pc_to_tv.click()

 def tv_to_pc(self):
      tv_to_pc = self.driver.find_element_by_xpath(
            'html/body/div[1]/div/topbar/header/div[2]/div[2]/div[1]/button[2]')
      tv_to_pc.click()`

问题是,当我从电脑切换到电视时,屏幕"放大",使按钮显示在没有缩放的同一位置。所以,我无法点击我的&#; tv_to_pc'按钮。方法,而不是点击实际按钮,它会点击按钮所在的位置。

所以,我找到的解决方案是点击带有坐标的按钮,这样我实际上会点击我想要的地方,而不是像我正在那样点击一个无法点击的地方。

问题是,我不知道如何做到这一点,并需要帮助解决这个问题。

2 个答案:

答案 0 :(得分:0)

我建议您只使用JavaScriptExecutor点击按钮。它会点击它,无论它在页面上的什么位置。有关详细信息,请参阅How to execute a javascript in a Python webdriver和其他问题。一般格式是

element = driver.find_element_by_id("someId") 
driver.execute_script("arguments[0].click();", element)

另外......你不想那样使用XPath。任何从HTML标签开始的XPath或者不仅仅是几个级别的XPath都会非常脆弱。在硒xpaths上做一些谷歌搜索并阅读一些指南以获取更多信息。

答案 1 :(得分:-1)

尝试moveToElement,然后执行点击

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
new Actions(driver).moveToElement(element, x, y).click().perform();

x是xoffset y是yoffset

请注意,如果您使用Javascript进行点击,则不会进行原生点击。