Selenium学习之元素属性值、坐标位置、大小

本文介绍了如何使用Selenium进行自动化测试,详细讲解了get_attribute方法获取元素属性,包括文本内容、HTML以及特定属性如id、class等,并通过实例演示了如何获取元素的坐标位置和大小,包括location()、size()方法及其使用场景。

   在自动化测试过程中,我们可能需要获取元素的属性值以及坐标位置、大小,那么怎么获取这些信息呢?在这一篇我做了下简单记录。

(一)get_attribute 获取元素的给定属性或属性

       首先,先来说一下,如何获取元素的给定属性或属性。在Selenium中提供了一个get_attribute()的方法,通过在方法中设置不同的参数内容可以获取到相应的信息,其中给定属性提供了下面三种:

(1)获取元素的文本内容get_attribute(‘textContent’)

(2)获取元素的内部HTMLget_attribute('innerHTML')

(3)获取元素的外部HTMLget_attribute('outerHTML')

       除了给定属性外,非给定属性的话,则根据不同元素而定,比如get_attribute('id')可以拿到元素的id,get_attribute('class')可以拿到元素的class等等。这里拿百度首页的“新闻”元素的父元素来举例,这是我将要测试的父元素的部分html截图,显示如下:

具体代码操作:获取百度首页的“新闻”元素的父元素中的文本内容、内部HTML、外部HTML、新闻元素的href属性值。

测试代码如下:

from selenium import webdriver
from time import sleep

class TestCase(object):

    def __init__(self):
        self.driver = webdriver.Chrome()
        self.url = 'http://www.baidu.com'
        self.driver.maximize_window()
        self.driver.get(self.url)

    def test_get_attribute(self):
        dad = self.driver.find_element_by_id('s-top-left')
        news = self.driver.find_element_by_css_selector('#s-top-left .a')
        print('innerHTML =', dad.get_attribute('innerHTML'))
        print('outerHTML =', dad.get_attribute('outerHTML'))
        print('text =', news.get_attribute('textContent'))
        print('news href=', news.get_attribute('href'))

if __name__ == '__main__':
    test = TestCase()
    test.test_get_attribute()

    控制台显示结果如下:

       可以看到的是get_atrribute('innerHTML')返回的结果不会包括父元素的HTML代码,而get_atrribute('outerHTML')返回的结果包括,这个通过红框显示新闻元素是否有被其他元素包含可以看出。另外,通过get_atrribute('textContent')拿到了新闻元素的文本内容——“新闻”,同时根据href这个属性名称拿到了该属性的值。

(二)获取元素的坐标位置和大小

        在上一篇的ActionChains模块的move_to_element_by_offset()方法中其实我已经有运用到了,附上代码和控制台结果:

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains

class TestCase(object):

    def __init__(self):
        self.driver = webdriver.Chrome()
        self.url = 'http://www.baidu.com'
        self.driver.maximize_window()
        self.driver.get(self.url)

    def test_move_to_element_with_offset(self):
        kw = self.driver.find_element_by_id('kw')
        kw_x = kw.location.get('x')#百度搜索框的x坐标
        kw_y = kw.location.get('y')#百度搜索框的y坐标
        print(kw.location, ',kw_x = ', kw_x, ',kw_y = ', kw_y)
        more = self.driver.find_element_by_css_selector('#s-top-left > .s-top-more-btn > a') #“更多”元素
        more_x = more.location.get('x') #“更多”元素的x坐标
        more_y = more.location.get('y') #“更多”元素的y坐标
        print(more.location, ',more_x = ', more_x, ',more_y = ', more_y)
        more_w = more.size.get('width')  #“更多”元素的宽
        more_h = more.size.get('height') #“更多”元素的高
        print(more.size, ',more_w = ', more_w, ',more_h = ', more_h)
        xoffset = kw_x - more_x - more_w / 2
        yoffset = kw_y - more_y - more_h / 2
        ActionChains(self.driver).move_to_element_with_offset(more, xoffset, yoffset).perform()
        sleep(3)
        more_hide_window = self.driver.find_element_by_id('s-top-more')
        print(more_hide_window)

if __name__ == '__main__':
    test = TestCase()
    test.test_move_to_element_with_offset()

控制台显示结果如下:

        从上面的代码中,我们可以看到使用了location()方法分别拿到百度搜索框和“更多”元素的坐标位置,元素的坐标返回的是一个json字符串,例如:{'x':633,'y':222} 。通过get('x')和get('y')分别拿到x坐标和y坐标(这个坐标是相对于浏览器左上角的偏移量)。要注意的是:获取元素坐标位置,一定记得先把浏览器窗口最大化

        使用size()方法拿到“更多”元素的大小,元素的大小返回的也是一个json字符串:{'height':15,'width':26},然后通过get('width')和get('height')方法分别拿到元素的宽和高。

其实除了location()和size()方法,在Python中还提供了一个“element.rect”的方式去获取元素坐标位置和尺寸,话不多说直接上代码:

def test_get_rect(self):
    more = self.driver.find_element_by_css_selector('#s-top-left > .s-top-more-btn > a') #“更多”元素
    rect = more.rect
    print(rect)
    print('x = ', rect['x'], ',y = ', rect['y'], ',width = ', rect['width'], ',height = ', rect['height'])

控制台显示结果如下:

以上,就是Selenium中获取元素属性值、坐标位置、大小的全部记录,有不对的地方欢迎指正~

### 使用 Selenium 获取网页元素坐标位置 为了获取网页元素的位置,可以利用 `location` 属性来获得该元素相对于浏览器窗口左上角的 X 和 Y 坐标。此操作通常用于了解特定 UI 组件的确切屏幕位置以便进一步交互或验证布局准确性。 当调用 `element.location()` 方法时会返回一个字典对象,其中包含了键 'x' 和 'y'[ ^1 ]。这些值代表了目标 HTML 元素边界矩形左上角距离视口顶部和左侧边缘的距离。值得注意的是,在执行此类查询之前应当确保浏览器已被设置为全屏模式以避免因窗口尺寸变化而导致的结果不一致[ ^1 ]。 下面是一个简单的 Python 脚本示例,展示了怎样借助 Selenium 库取得指定 DOM 对象的位置信息: ```python from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() # 浏览器最大化非常重要 driver.get('http://example.com') search_box = driver.find_element_by_name('q') position_info = search_box.location print(f"Element's top-left corner is at ({position_info['x']}, {position_info['y']})") more_button = driver.find_element_by_link_text("More") button_position = more_button.location print(f"'More' button located at ({button_position['x']},{button_position['y']})") ``` 对于某些特殊情况下如 Mac 设备上的高分辨率显示器可能还需要额外考虑缩放比例的影响,并相应调整计算逻辑以保证最终得到的数据能够准确反映实际视觉效果[ ^3 ]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值