Clicking at coordinates without identifying element

前端 未结 14 1896
醉酒成梦
醉酒成梦 2020-11-28 07:49

As part of my Selenium test for a login function, I would like to click a button by identifying its coordinates and instructing Selenium to click at those coordinates. This

相关标签:
14条回答
  • 2020-11-28 07:59
    import pyautogui
    from selenium import webdriver
    
    driver = webdriver.Chrome(chrome_options=options)
    driver.maximize_window() #maximize the browser window
    driver.implicitly_wait(30)
    driver.get(url)
    height=driver.get_window_size()['height']
    
    #get browser navigation panel height
    browser_navigation_panel_height = driver.execute_script('return window.outerHeight - window.innerHeight;')
    
    act_y=y%height
    scroll_Y=y/height
    
    #scroll down page until y_off is visible
    try:
        driver.execute_script("window.scrollTo(0, "+str(scroll_Y*height)+")")
    except Exception as e:
        print "Exception"
    #pyautogui used to generate click by passing x,y coordinates
    pyautogui.FAILSAFE=False
    pyautogui.moveTo(x,act_y+browser_navigation_panel_height)
    pyautogui.click(x,act_y+browser_navigation_panel_height,clicks=1,interval=0.0,button="left")
    

    This is worked for me. Hope, It will work for you guys :)...

    0 讨论(0)
  • 2020-11-28 07:59

    If you can see the source code of page, its always the best option to refer to the button by its id or NAME attribute. For example you have button "Login" looking like this:

     <input type="submit" name="login" id="login" />
    

    In that case is best way to do

    selenium.click(id="login");
    

    Just out of the curiosity - isnt that HTTP basic authentification? In that case maybe look at this: http://code.google.com/p/selenium/issues/detail?id=34

    0 讨论(0)
  • 2020-11-28 08:00

    Selenium won't let you do this.

    0 讨论(0)
  • 2020-11-28 08:02

    In C# API you use actions

    var element = driver.FindElement(By...);
    new Actions(driver).moveToElement(element).moveByOffset(dx, dy).click().perform();
    

    Although it is best to just use simple Id, CSS, Xpath selectors when possible. But the functionality is there when needed (i.e. clicking elements in certain geographic places for functionality).

    0 讨论(0)
  • 2020-11-28 08:02

    This worked for me in Java for clicking on coordinates irrespective on any elements.

    Actions actions = new Actions(driver);
    actions.moveToElement(driver.findElement(By.tagName("body")), 0, 0);
    actions.moveByOffset(xCoordinate, yCoordinate).click().build().perform();
    

    Second line of code will reset your cursor to the top left corner of the browser view and last line will click on the x,y coordinates provided as parameter.

    0 讨论(0)
  • 2020-11-28 08:04

    If using a commercial add-on to Selenium is an option for you, this is possible: Suppose your button is at coordinates x=123, y=456. Then you can use Helium to click on the element at these coordinates as follows:

    from helium.api import *
    # Tell Helium about your WebDriver instance:
    set_driver(driver)
    click(Point(123, 456))
    

    (I am one of Helium's authors.)

    0 讨论(0)
提交回复
热议问题